動かざることバグの如し

近づきたいよ 君の理想に

Pythonのpycacheディレクトリ等を一括削除するコマンド

環境

やりたいこと

カレントディレクトリ以下のPythonキャッシュゴミファイルを一括削除したい 死んでもgitに入れたくない

コマンド

find . -type d -name '__pycache__' -exec rm -rf {} +

find . -type f -name '*.pyc' -delete
  • find . -type d -name '__pycache__' -exec rm -rf {} +

    • find コマンドを使ってカレントディレクトリ(.)から開始する。
    • -type d オプションでディレクトリのみを検索対象にする。
    • -name '__pycache__' で、名前が __pycache__ディレクトリを指定。
    • -exec rm -rf {} + で見つかったディレクトリを rm -rf で強制削除する。{} は見つかったファイル(ディレクトリ)に置き換わる。+ は一度に複数のファイルを削除する効率的な方法。
  • find . -type f -name '*.pyc' -delete

    • find コマンドでカレントディレクトリから検索を開始する。
    • -type f オプションでファイルのみを対象にする。
    • -name '*.pyc' で、拡張子が .pycPythonキャッシュファイルを指定。
    • -delete オプションを使って、見つかったファイルを直接削除する。

備考

findなら -delete でも消せるじゃん、と思ったそこの貴方。残念ながら以下のコマンドでは動作しない。

# NOT WORKING!!!
find . -type d -name '__pycache__' -delete

find . -type d -name '__pycache__' -delete が動作しない理由は、-delete オプションが特定の条件にのみ適用されるためだ。

-deleteディレクトリを削除する際に、そのディレクトリが空である必要がある。つまり、__pycache__ のように中にファイルが含まれているディレクトリを削除しようとすると、エラーが発生する。また、今回のように再帰的にディレクトリを削除したい場合は、rm -rf を使った方が安全で確実に削除できる。