폴더를 재귀적으로 압축하고 특정 디렉터리를 제외하고 싶습니다( 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/\*이 됩니다.
그러나 나는 인용문을 선호합니다 :)