質問で言及したフラグは同じだと思いますが、前者は次のメッセージを受け取りますが、後者では何も受け取りません。
$ 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
コマンドは除外しますが、上記のシェルフラグメントを除く)が含まれていない限り。