1 つのコマンド (find) を使用して複数のパターンのファイルを削除する

1 つのコマンド (find) を使用して複数のパターンのファイルを削除する

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

関連情報