フォルダを再帰的に圧縮し、特定のディレクトリを除外したい(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/
またはより簡潔に(Web上の他の場所から取得した文法)
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/\* になります。
しかし、私は引用を好む:)