特定のフォルダ内に多くのサブフォルダがあり、これらのサブフォルダにはより小さなファイルがたくさん含まれています。プログラム的に生成されるので、そこにいくつがあるかわかりません。
これらのすべてのサブフォルダとファイルを削除することを決定し、次のコマンドを実行しました。
rm -rf foldername/
しかし、rmコマンドの実行に時間がかかり、すべてのファイルのリンクを解除する必要があるため、完全に正常だと思いました。
しかし、次のコマンドを実行して、このフォルダのサイズが小さくなっていることを確認することにしました。
du -sh foldername/
ただし、上記のコマンドで発生するエラーは次のとおりです。
du: cannot access `foldername/file': No such file or directory
このエラーはなぜ発生しますか?
ベストアンサー1
du
ディレクトリツリーを再帰的に巡回するコマンドと同様に、次のように進みます。
- そのパスでアクセスされるファイルに関する情報を読み取ります。
du
システムコールの場合stat
ファイルの種類(特にディレクトリの場合)とサイズを提供します。元の名前はコマンドラインから続きました。 - ファイルがディレクトリの場合開いているそれと読むファイル名のリストです。
- ディレクトリ内の各ファイル名に対してファイルパス()を設定し、手順1から繰り返し作業します。このステップは、部分的に前のステップと並列に実行できます(実装によって異なります)。
DIRECTORY/ENTRY_NAME
rm
ファイルを1つずつ実行して削除します。時にはdu
手順2でファイル名を読みましたが、手順3でファイルを処理したときにrm
削除されたことがあります。このエラーが表示されるかどうかと回数は、合計の相対速度に依存し、ほとんどrm
予測du
できません。
¹ファイルに直接アクセスするには、パス(相対ディレクトリまたは絶対ディレクトリ情報を含む)またはディスクリプタを介して(ファイルが開いている場合)2つだけです。