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/

またはより簡潔に(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/\* になります。

しかし、私は引用を好む:)

関連情報