問題:Zshスクリプトからrsync
を呼び出すと、特定の拡張子セットの1つを持つファイルを除外するようにrsyncに指示します。私がこれをやっているやり方は次のとおりです。rsyncによってコピーされる特定の拡張子セットを含むファイルを除外する
rsync -r --exclude '*.bak' --exclude '*.save' --exclude '*.backup' --exclude '*.old' ... from_directory/* to_directory
これは面倒ですが、コマンドラインは非常に長くなります。私は代替
# THIS DOES NOT WORK:
rsync -r --exclude '*.bak' --exclude '*.{save,backup,old,...}' from_directory/* to_directory
と試みたが、これは動作しません - rsync
にもシェル・レベルで、これはグロブファイルの一部ではないので、本当に驚くべきことではないである(中括弧を使用して、短いカットを処理していませんがコマンドラインの解釈の初期段階で発生します)。
ファイルに除外するすべてのパターンを書き込んで、--exclude
の代わりに--exclude-list
を使用することも考えました。これはうまくいくはずですが、このソリューションが気に入らないのは、自分のスクリプトが自己完結型であること、つまりファイルパターンが別のファイルではなくスクリプト内に表示されたかったからです。もちろん
は常に一時ファイルを作成するためのソリューション、拡張子を含むHERE文書使用してあります:
cat <<<LIST >excluded.txt
*.bak
*.save
... etc
LIST
rsync -r --exclude-list excluded.txt ....
rm excluded.txt
を私はいくつかの巧妙な使用のいずれかによって、よりエレガントな解決策があるかどうかを疑問に思いますrsyncオプション、または一時ファイルの処理を容易にするZsh機能によって実行されます。