답변:
따라서 올바르게 이해하면 루트 폴더를 포함하지 않고 특정 폴더에 파일 및 폴더를 보관하려고합니다.
예:
/test/test.txt
/test/test2.txt
여기서 test.txt 및 test2.txt는 zip에 저장되지만 / test /는 저장되지 않습니다
/ test / 디렉토리로 들어가서 다음과 같이 실행할 수 있습니다.
zip -r filename.zip ./*
filename.zip이라는 동일한 폴더에 아카이브를 만듭니다. 또는 폴더 외부에서 실행하면 실행할 수 있습니다.
zip -r test.zip test/*
/ *는 전체 폴더 대신 폴더의 내용 만 포함하는 부분입니다.
편집 : OP는 여러 개의 지퍼를 원했고 솔루션은 약간의 해킹이되었습니다. 더 나은 방법이 있는지 궁금합니다.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
작동하지 않습니다. 디렉토리 외부에서 이것을 달성하는 올바른 방법이 있습니까?
zip 명령에서 -j
또는 --junk-paths
옵션을 사용하십시오 .
로부터 우편 man 페이지 :
-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
이것이 도움이되기를 바랍니다.
(cd directory && zip -r ../out.zip .)
기본 쉘을 동일한 디렉토리에 유지하고 명령 후에 죽는 서브 쉘의 디렉토리 만 변경합니다.