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 '&*' -または -name '$*$' \) -print -delete