임시 위치에 파일을 추출하지 않고 tar 파일의 파일 이름 수정

임시 위치에 파일을 추출하지 않고 tar 파일의 파일 이름 수정

이라는 폴더에 일부 파일이 포함된 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.

관련 정보