*/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
ディレクトリではない場合、コマンドは失敗します。ある意味では、それは主張の役割を果たします。