Tar는 디렉토리 구조를 유지하면서 디렉토리의 모든 PDF를 압축합니다.

Tar는 디렉토리 구조를 유지하면서 디렉토리의 모든 PDF를 압축합니다.

내 디렉토리 중 하나에 있는 모든 PDF 파일을 포함하는 압축된 타르볼을 만들려고 합니다. 디렉터리 구조를 보존해야 합니다. 빈 디렉토리는 필요하지 않지만 디렉토리가 있는지는 별로 신경쓰지 않습니다.

예를 들어, 다음과 같은 디렉터리가 있다고 가정해 보겠습니다.

dir
dir/subdir1
dir/subdir1/subsubdir1/song.mp3
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir2/subsubdir1/another-song.mp3
dir/subdir2/subsubdir1/top-ten-movies.txt
dir/subdir3
dir/subdir3/another-document.pdf

dir.tar.gz명령을 실행한 후 다음을 포함하고 싶습니다 .

dir
dir/subdir2
dir/subdir2/subsubdir1
dir/subdir2/subsubdir1/document.pdf
dir/subdir3
dir/subdir3/another-document.pdf

가능한?

답변1

그러면 모든 PDF가 나열됩니다.

$ find dir/ -name '*.pdf'
./dir/subdir2/subsubdir1/document.pdf
./dir/subdir3/another-document.pdf

이것을 파이프로 구분 xargs하여 공백으로 구분된 단일 줄로 가져오고 피드하여 tar아카이브를 만들 수 있습니다.

$ find dir/ -name '*.pdf' | xargs tar czf dir.tar.gz

(이 접근 방식은 빈 디렉터리를 생략합니다)

답변2

bash ≥4 또는 zsh 및 GNU tar 사용:

tar -czf dir.tar.gz dir/**/*.pdf

PDF 파일 수가 많고 명령줄이 너무 길면 이 방법이 작동하지 않을 수 있습니다. 그런 다음 더 복잡한 찾기 기반 솔루션이 필요합니다(역시 GNU tar 사용).

tar -cf dir.tar -T /dev/null
find dir -name '*.pdf' -exec tar -rf dir.tar {} +
gzip dir.tar

또는 이식 가능하도록 다음을 사용하여 아카이브를 만들 수 있습니다.공원.

pax -w -x ustar -s '/\.pdf$/&/' -s '/.*//' . | gzip >dir.tar.gz

첫 번째는 이름을 변경하지 않고 -s모든 파일을 포함하는 것을 의미합니다 . .pdf두 번째는 -s다른 모든 파일의 이름을 빈 이름으로 바꾸는 것을 의미합니다. 이는 본질적으로 해당 파일을 아카이브에 포함하지 않음을 의미합니다.

관련 정보