フラグを探してください:-exec rm -rfと-delete

フラグを探してください:-exec rm -rfと-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}

答え1

GNUでマニュアルを探す:

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

その他の問題:

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

答え2

トルこのエラーが発生する理由とそれを使用するときに解決する方法について説明しますfind

シェルスクリプトで表現できない追加条件がなければ、呼び出すfind意味はありません。-mindepth 1やりたいことは次のように書くことができます

rm -rf */

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

関連情報