에서 특정 기능을 얻으려고 합니다 zip
. 특정 디렉터리에 모든 것을 재귀적으로 압축하고 해당 디렉터리 내의 디렉터리 구조를 보존하고 싶지만 정규화된 경로가 아카이브의 일부가 되도록 하고 싶지는 않습니다.
내가 가지고 있고 해당 폴더 내에서 명령을 실행하는 것처럼 /path/to/test/tmp/
모든 내용을 압축하고 싶다고 가정해 보겠습니다 .tmp/
플래그 -r
는 내가 원하는 것을 가져오지만 실행 위치에 따라 필요한 디렉터리 위의 경로 정보를 포함합니다.
user@MBP:~/path/to/test$ zip -r myarchive.zip tmp/
adding: tmp/foo.txt (deflated 68%)
adding: tmp/bar/bar.txt (deflated 41%)
adding: tmp/baz/baz/baz.txt (deflated 92%)
플래그 -j
는 파일 이름을 제외한 모든 것을 잘라냅니다.
user@MBP:~/path/to/test$ zip -rj myarchive.zip tmp/
adding: foo.txt (deflated 68%)
adding: bar.txt (deflated 41%)
adding: baz.txt (deflated 92%)
나에게 필요한 것은 다음과 같은 결과를 제공하는 것입니다.
adding: foo.txt (deflated 68%)
adding: bar/bar.txt (deflated 41%)
adding: baz/baz/baz.txt (deflated 92%)
하지만 어디에서나 실행되도록 지정할 수 있습니다. 나는 이것을 cron으로 스크립트하려고합니다. 내가 찾고 있는 것을 찾을 수 없습니다.매뉴얼 페이지. 스크립트에서 디렉토리를 실제로 변경하는 것 외에 어떻게 이를 수행할 수 있습니까?
답변1
zip
(적어도 내 플랫폼에 있는 Info-ZIP 버전에서는) 그렇게 하는 것을 허용하지 않는 것 같습니다 . ( @Xen2050이 암시한 것처럼 / 옵션이 tar
있는 와는 다릅니다 .)-C
--directory
하지만 묻고 싶습니다. 스크립트에서 디렉터리를 변경하는 것이 그렇게 나쁜가요? 특히 서브셸에서 그렇게 할 수 있고 스크립트의 현재 작업 디렉터리에 영향을 주지 않는 경우(자세히 설명됨)이 SO 답변에서):
pwd
(cd /path/to/test/tmp; zip -r myarchive.zip .)
pwd # prints the same as in line 1
최종 Zip 파일은 /path/to/test/tmp
.