tar 아카이브에서 파일 제거 (약 5000 개) 파일이 포함되어

많은 파일 foo.tar.xz(예 : 200000)을 포함 하는 큰 파일 이 있습니다. 이 아카이브에 내가 원하지 않는 (약 5000 개) 파일이 포함되어 있음을 알았습니다. 디스크에 모든 것을 압축 해제하기에 충분한 디스크 공간이 없습니다. 또한, 그렇게하면 속성 / 권리가 손실 될 수 있습니다. 그래도 압축 아카이브 의 두 복사본을 호스팅하기에 충분한 공간이 있습니다. 아카이브에서 개별 파일로 압축을 풀지 않고 아카이브에서 파일의 일부를 제거하는 도구가 있습니까 (파일 이름에 정규식으로 지정됨)?



답변

GNU tar에는 --delete오늘날에도 아카이브와 작동 하는 옵션이 있습니다.

예를 들어 다음과 같이 사용하십시오.

tar -vf yourArchive.tar --delete your/path/to/delete

주의 : 대부분 의 자기 테이프 매체 에서는 작동 하지 않을 것입니다. 그러나 tar파이프에서 작업하는 데 아무런 문제가 없으므로 임시 tar 파일을 사용하고 그 후에 테이프를 덮어 쓸 수 있습니다. 압축 파일에서도 작동하지 않으므로 파일을 압축 해제해야합니다.

또한 tar 아카이브의 (선별 적으로) 패킹 된 선형 특성으로 인해 작업이 다소 느려질 수 있습니다.


답변

(내가 편집 된 질문을 오해 한 것처럼 편집 됨)

전체 파일을 추출, 삭제 및 다시 압축하는 것이 가장 좋습니다.

unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz

tar에서 직접 파일을 삭제할 수 없습니다.

tar는 원래 임의 탐색을 잘 수행하지 않는 테이프 드라이브 용 스트림입니다. 이론적으로 디스크 파일 시스템에서 구멍을 뚫고 / 남은 파일을 다시 쓸 수 있으며, 압축을 사용하면 포인트가 전부는 아니더라도 대부분은 ot니다. 압축 방법은 파일에서 이전에 발생한 내용에 크게 의존합니다. 이를 위해서는 압축 방법과 tar 파일 형식에 대한 매우 자세한 지식이 필요합니다. 그것은 아무도 그것을 귀찮게하지 않을 정도로 복잡합니다. 파일을 보관하고 무시하는 것이 더 저렴합니다.

이 기능이 필요한 경우 tar는 원하는 것이 아닐 것입니다.


답변

manual 에 따르면 파일 이름 목록을 전달하여 파일 이름 tar만 추출 할 수 있습니다. 예를 들면 다음과 같습니다.

$ tar --file archive.tar --list
foo
bar
baz

$ tar --file archive.tar --extract foo