zip 아카이브에서 하위 디렉터리 제외 - 구문을 설명해 주세요.

zip 아카이브에서 하위 디렉터리 제외 - 구문을 설명해 주세요.

폴더를 재귀적으로 압축하고 특정 디렉터리를 제외하고 싶습니다( temp/.hidden아래 예 참조). 아래 예 와 같이 zip 파일에 최상위 폴더가 있기를 원하므로 temp작업 디렉터리는 temp.

mkdir -p temp/subdir
touch temp/subdir/keepthisfile.txt
touch temp/excludethisfile.txt
mkdir temp/.hidden
touch temp/.hidden/exclude.txt
cd temp/

내가 원하는 것을 달성하기 위해 필요한 코드는

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden/* ../temp/.hidden/

또는 더 간결하게(웹의 다른 곳에서 가져온 문법)

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/*.hidden*

../temp/*.hidden*이것이 작동하는 이유는 알지만, 아래 코드가 왜 동일한 작업을 수행할 수 없는지 이해가 되지 않습니다(예: 그냥 대신에 왜 해야 합니까 ../temp/.hidden*?)

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt ../temp/.hidden*

답변1

../temp/.hidden*Zip을 실행하기 전에 쉘이 확장됩니다 . ../temp/.hidden패턴이 더 이상 일치하지 않습니다 ../temp/.hidden/exclude.txt. Zip 매뉴얼 페이지에서 권장하는 대로 모드를 참조해야 합니다.

zip -r temp.zip ../temp/ -x ../temp/excludethisfile.txt '../temp/.hidden*'

답변2

감사해요! 이제 올바른 RFTM을 사용하면 내 매뉴얼 페이지에서 제안합니다.

백슬래시는 쉘 파일 이름 대체를 방지하므로 zip은 모든 디렉토리 수준에서 이름 일치를 수행합니다.

따라서 코드는 zip -r temp.zip ../temp/ -x ../temp/exclude.txt ../temp/.hidden/\*이 됩니다.

그러나 나는 인용문을 선호합니다 :)

관련 정보