이라는 폴더에 일부 파일이 포함된 tar 파일이 있습니다 old_name
. 이제 파일을 디스크에 추출하지 않고 폴더 이름을 바꾼 새 tar 파일을 만들고 싶습니다. new_name
이렇게 하면 대규모 아카이브의 경우 상당히 느려질 것입니다(디스크 읽기 및 쓰기 속도가 두 배 이상).
나는 이 작업을 수행하는 방법을 알고 있습니다.tar -xf old.tar; tar -cf new.tar --transform 's/old_name/new_name/' old_name
몇 가지를 시도했지만 아무것도 작동하지 않는 것 같습니다.
tar -cOf old.tar | tar -xf new.tar --transform 's/old_name/new_name/'
cat old.tar | tar --delete --transform 's/old_name/new_name/' > new.tar
cat old.tar | tar -u --transform 's/old_name/new_name/' > new.tar
하지만 아무것도 작동하지 않는 것 같습니다.
닫은 후 다음을 발견했습니다.
그러나 이는 경로를 변경하는 것이 아니라 tarball에서 파일을 삭제하는 것입니다.
답변1
tar는 tar를 생성하거나 추출할 수 있지만 이러한 방식으로 스트림에서 작동할 수는 없습니다.
비슷한 것이 필요합니다 tar-stream
. 원하는 것을 수행하는 예제도 있습니다.
https://github.com/mafintosh/tar-stream#modifying-existing-tarballs
답변2
해봤어?아카이브 마운트아카이브를 마운트 지점에 마운트하려면 디렉터리 이름을 바꾼 다음 아카이브를 마운트 해제하시겠습니까?
$ archivemount archive.tar /mnt/archive
$ ls /mnt/archive
/mnt/archive/archive/file1
/mnt/archive/archive/file2
$ mv /mnt/archive/archive/file2 /mnt/archive/archive/file3
$ ls /mnt/archive
/mnt/archive/archive/file1
/mnt/archive/archive/file3
$ umount /mnt/archive
$ tar -tf archive.tar
archive/file1
archive/file3
# It will move the original archive to archive.tar.orig
$ tar -tf archive.tar.orig
archive/file1
archive/file2
이 관련 답변에서 도구를 찾았습니다.기존 tar.gz 아카이브에 파일을 어떻게 추가/업데이트합니까?. 또한 유사한 도구에 대해 언급합니다 tarfs
.