%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B.png)
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