gzip 및 xz에서 "zip"의 -R 기능을 어떻게 에뮬레이션할 수 있나요?

gzip 및 xz에서 "zip"의 -R 기능을 어떻게 에뮬레이션할 수 있나요?

"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

유틸리티 결합 findtar압축:

그리고 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

관련 정보