find を使用して *.py~ と *.pyc ファイルを一度に削除するには?

find を使用して *.py~ と *.pyc ファイルを一度に削除するには?

.pyそして、ファイルが発生するたびに.pycディレクトリ(およびサブディレクトリ)をクリーンアップしたいと思います。私は次を試しました

find . -name '*pyc' -o -name '*py~' -exec rm -f {} \;

すべてのファイルがありませんpyc。するとき

find . -name '*pyc' -o -name '*py~'

pycこのコマンドは削除されていないファイルを探します。どんな洞察力がありますか?

答え1

ワイルドカードパターンを使用するのではなく、ワイルドカードパターンを使用しないでください-o

find . -name '*py[c~]' -delete

または:

find . -name '*py[c~]' -exec rm -f {} +

答え2

演算子-a(2つの述語の間に暗黙的)が優先されるため、-o括弧が必要です。

find . \( -name '*pyc' -o -name '*py~' \) -a -exec rm -f {} +

(上記の内容はデモ目的でのみ含まれており、暗黙的であるため-a必要ありません。)避けることができれば、各ファイルごとに1つずつ実行する必要がないので;交換しました。+rm

答え3

bash 4+を使用している場合、globstarは再帰ワイルドカードを提供するため、findは必要ありません。

shopt -s globstar
for f in ./**/*.py{c,~}; do rm "$f"; done

これはshoptaで区切られず、独自の行になければなりません;(可能であれば、スクリプトの一番上、shebangの直下で使用する必要があります)。

答え4

私はこの質問があまり新しいものではないことを知っています。しかし、おそらく使用するのに十分でしょう。

rm -f `find . -name '*.pyc' -o -name '*.py~' `

関連情報