web-dev-qa-db-ja.com

フラグの検索:-exec rm -rf vs -delete

質問で述べたフラグは同じだと思いましたが、前者では次のメッセージが表示されますが、後者では何も表示されません。

$ find . -mindepth 1 -type d -exec rm -rf {} \;
find: `./practice4': No such file or directory
find: `./practice10': No such file or directory
find: `./practice7': No such file or directory
find: `./practice9': No such file or directory
find: `./practice1': No such file or directory
find: `./practice5': No such file or directory
find: `./practice3': No such file or directory
find: `./practice6': No such file or directory
find: `./practice2': No such file or directory
find: `./practice8': No such file or directory

私が持っている追加の質問は次のとおりです:、すべてのサブディレクトリを削除するためのより簡単なコードはありますか?削除の順序はランダムですか?を使用してディレクトリを作成しました

$ mkdir practice{1..10}
6
Forethinker

GNUマニュアルを探す:

もしあなたの find' command removes directories, you may find that you get a spurious error message whenfind 'は、現在削除されているディレクトリに再帰しようとします。 `-depth 'オプションを使用すると、通常、この問題は解決します。

その他の質問:

  • コマンドの単純さは状況によって異なります。状況は次のようになります。rm -rf practice*
  • IIRC、ファイルの処理順序はファイルシステムによって異なります。
6
Thor

Thor は、このエラーが発生する理由と、findを使用するときにエラーを修正する方法についてはすでに説明しています。

シェルスクリプトで表現できない追加の条件がない限り、find-mindepth 1で呼び出しても意味がありません。あなたがやろうとしていることは書くことができます

rm -rf */

現在のディレクトリに、名前が.*と一致しない)で始まるディレクトリまたはディレクトリへのシンボリックリンク(findコマンド)が含まれていない限り除外しますが、上記のシェルスニペットは含まれます)。