"zip" 프로그램에는 사용자가 디렉토리 트리에서 특정 이름을 가진 모든 파일을 압축할 수 있도록 하는 -R 기능이 있습니다.zip -rv/s zip -R
예를 들어:
zip -R bigfile "bigfile"
다음을 모두 압축합니다:
./bigfile
./a/bigfile
./a/b/bigfile
./a/b/c/bigfile
.....
그러나 -R 기능은 gzip 또는 xz에 없는 것 같습니다. 나는 이것을 시도하고 매뉴얼 페이지도 확인했습니다.
그렇다면 gzip과 xz에서 이 동작을 어떻게 시뮬레이션합니까?
답변1
유틸리티 결합 find
및 tar
압축:
그리고 gzip
:
find . -type f -name bigfile | tar cfz bigfile.tgz -T -
또는 다음과 같이 xz
:
find . -type f -name bigfile | tar cfJ bigfile.txz -T -
find
현재/작업 디렉토리의 모든 파일을 재귀적으로 검색 bigfile
하고 결과 경로 이름을 제공하여 tar
타르볼을 생성하고 압축합니다.
이 명령은 질문에 제공된 예에 맞습니다. 에 제공된 다양한 모드에는 zip -R
에 제공된 해당 매개변수가 필요합니다 find
.
또한 이것이 가능한 모든 파일 이름에 대해 작동하지 않는다는 점을 명심하십시오. --null 옵션을 고려하고 find -print0에서 tar를 제공해야 합니다.
또한 tar
"-T" 옵션은 모든 시스템(예: HP-UX)에서 사용할 수 있는 것은 아닙니다.
편집 1
예를 들어 zip, rar 또는 7-zip과 달리 gzip 및 xz는 여러 파일을 단일 파일로 압축할 수 없습니다.
gzip 매뉴얼 페이지를 인용하면 다음과 같습니다.
나중에 독립적으로 추출할 수 있도록 여러 멤버가 포함된 단일 아카이브 파일을 생성하려면 tar 또는 zip과 같은 아카이브 프로그램을 사용하십시오. GNU tar는 gzip을 투명하게 호출하는 -z 옵션을 지원합니다. gzip은 tar를 대체하는 것이 아니라 보완하도록 설계되었습니다.
바라보다여러 파일을 하나의 gz 파일로 압축하는 방법은 무엇입니까?그리고여러 파일을 .xz 아카이브로 압축하는 방법은 무엇입니까?.
편집 2
OP의 목표가 검색 기준을 충족하는 모든 파일에 대해 gzip 파일을 생성하는 것이라면 다음 명령을 실행해야 합니다.
find . -type f -name bigfile | gzip > bigfile.gz
xz 파일의 경우:
find . -type f -name bigfile | xz > bigfile.xz
검색 기준을 충족하는 각 파일에 대해 동일한 디렉터리에 압축 파일을 생성하고 원본 파일은 "변경되지 않은" 상태로 둡니다.
편집 3
제안대로@쿠살라난다, bash
처음 수행하는 경우:
shopt -s globstar
그런 다음 다음 명령을 실행하십시오.
tar -c -zf bigfile.tgz ./**/bigfile
검색 기준과 일치하는 하위 디렉터리의 여러 파일을 사용하여 아카이브 파일이 생성됩니다.
검색 기준을 충족하는 하위 디렉터리에 있는 모든 파일에 대해 압축 파일을 생성하는 것이 목표인 경우 명령을 실행한 후 shopt
다음을 실행하면 됩니다.
gzip ./**/bigfile