find
現在のディレクトリとサブディレクトリ内のさまざまなパターンに一致するファイルを(再帰的に)削除し、一致するファイルを出力して、stdout
どのファイルが削除されたかを確認しようとしています。
たとえば、'&' で始まるすべてのファイルと '$' で始まって終わるすべてのファイルを一致させたいとします。
私は以下を使用してみました:
find . -type f -name '&*' -or -type f -name '$*$' -exec rm -v {} \;
ただし、rm
最後の一致 ('$*$') にのみ適用されます。
したがって、私は次のことを試しました:
find . -type f -name '&*' -or -type f -name '$*$' -delete
しかし、これは最後のパターンにのみ一致するだけでなく、削除されたファイルを出力しません。
私はこれができることを知っています:
rm -v ``find -type f -name '&*' -or -type f -name '$*$'``
しかし、私はこの種のアプローチを避けてコマンドで実行したいと思っていますfind
。
何かヒントはありますか?
よろしくお願いします。
答え1
あなたの問題は実行者2 番目のパターンにのみ適用されます。これを修正するには、検索条件を括弧で囲んでみてください。
find . \( -type f -name '&*' -or -type f -name '$*$' \) -exec rm -v {} \;
注目すべき点は、これはバグではなく機能であるため、次のようなことができるということです。
find -type f -name '&*' -exec mv '{}' ./backup ';' -or -type f -name '$*$' -exec rm -v '{}' ';'
もしあなたが必要ならば
答え2
けれどツェッペリン答えは正しいです。私はこの解決策も見つけました:
検索 . -type f \( -name '&*' -or -name '$*$' \) -print -delete