9

ジャンクでいっぱいの一時ディレクトリがあり、それらはすべて__temp__(eg __temp__user_uploads)で始まり、クリーンアップ関数で削除したいと思います。私の関数の試みは実行することです:

find . -name __temp__* -exec rm -rf '{}' \;

コマンドを実行し、複数の__temp__ディレクトリ(__temp__fooおよび__temp__bar)がある場合、次の出力が得られます。

find: __temp__foo: unknown option

__temp__コマンドを実行し、ディレクトリ( )が1つしかない場合__temp__foo、それは削除され、次の出力が得られます。

find: ./__temp__foo: No such file or directory

コマンドが機能しないのはなぜですか、そのように一貫性がないのはなぜですか、どうすれば修正できますか?

4

1 に答える 1

26

深さ優先探索を使用して、シェルのメタ文字を引用(またはエスケープ)します*

find . -depth -name '__temp__*' -exec rm -rf '{}' \;

説明

-depthフラグがないと、findコマンドは一致するファイル名を削除してから、(現在はリンクされていない)ディレクトリに移動しようとします。__temp__これが、単一ディレクトリの場合の「そのようなファイルまたはディレクトリはありません」の起源です。

を引用符またはエスケープせず*に、シェルはそのパターンを展開し__temp__whatever、現在の作業ディレクトリ内のいくつかのファイル名と一致します。この拡張は混乱を招きfindます。これは、引数リストのその時点でファイル名ではなくオプションを期待しています。

于 2012-09-19T03:14:20.117 に答える