rsync フィルタが機能しません。すべてのファイルを除外します。

rsync フィルタが機能しません。すべてのファイルを除外します。

*/ls/ binフォルダのパターンを含むファイルをtestフォルダに同期しようとしています。

mkdir test
rsync -avv --exclude='*' --include=*/ls /bin/ test/
ls test

出力によると、インクルードフィルタは機能しません。

[sender] hiding file ls because of pattern *

何が間違っているのか知っている人はいますか?

ベストアンサー1

除外フィルタと埋め込みフィルタは左から右に評価されます。コマンドラインでは、これはすべてが除外されることを意味します。除外パターンはすでに想像できるすべての名前と一致するため、インクルードフィルタは効果がありません。

ls代わりに、呼び出されたすべてのファイル/binまたはそのサブディレクトリをコピーするには、次のようにします。

rsync -av -m --include='*/' --include='ls' --exclude='*' /bin/ test/

包含パターンを最初に配置し、明示的に含まれていない項目は最後に除外します。*/(少なくとも一般的な場合は)サブディレクトリに移動しようとしているので、インクルードパターンを一致させる必要があります。また、-mターゲットにファイルがない場合は、ディレクトリの作成を防ぐと付け加えました。

再帰を必要とせずに/bin/lsコピーを使用するには、rsync次のようにします。

rsync -av /bin/ls test/

ここに示す2つのコマンドでは、ターゲットパス名の末尾にスラッシュは必要ありませんが、testディレクトリではない場合、コマンドは失敗します。ある意味では、それは主張の役割を果たします。

おすすめ記事