作業順序はありますrm
か?私はrm
大きなディレクトリで作業していますが、削除された可能性があるコンテンツをどこで見つけるべきか疑問に思います。rm
まずファイルで動作し、次にディレクトリで動作しますか?それともinodeテーブルの一部の情報に基づいていますか?
仕様:GNU coreutils 8.22システムのrm:USB 2.0を使用してbeagleboneblackファイルシステムの外部Seagate HDD(ext4)で実行されるArch Linux。
背景ストーリー:
ディレクトリのクリーンアップと実行中です。
cp -r A/ B/ C/ Dest/
私も知らずに従うことになった
rm -r A/ B/ C/ Dest/
ただ単純なパフォーマンスをしたいとき
rm -r A/ B/ C/
私はこれを発見し、Ctrlすぐに+をクリックしました。具体的には&と命令を組み合わせたのでC時間が3秒もかかりませんでした。ないと思って入ってみましたが、ところで見ると完全で、time
rm
cp
Dest/
登場影響を受けないように。A/
B/
C/
小さすぎてちょっと驚きですね。合計サイズは100〜200 MBです。Dest/
だが1TBに少し及ばない水準だ。 Dest /を実行すると、ls
アルファベットの両端にファイルとディレクトリがあることがわかります(たとえばAFile.txt
... Zoo.txt
)。
幸運なので、rm
Dest /ディレクトリに大きなダメージを与える前にキャンセルしましたか?本当にそんなに遅いですかrm
(マッソッサ!)?
rm
それ以外の場合は、欠落している項目を推測できるように再帰的に項目を削除するにはどうすればよいですか?
私は失われたものを取り戻すことをあまり期待していません。
答え1
rm -r
各パラメータは順番に処理されます。引数がディレクトリの場合は、ディレクトリを一覧表示します(opendir
そしてreaddir
関数または同等の方法)各項目に対して順番に動作します。項目がディレクトリの場合は、その項目を再帰的に移動します。
これは、他のアプリケーションがディレクトリなどを再帰的に移動するために使用するのとまったく同じ方法ですfind
。ls -Rf
巡回順序は予測できません。ほとんどのファイルシステムでは、ディレクトリにファイルを追加、削除、または名前を変更しない限り、順序を再現できます(理論的には、順序は完全にランダムで毎回変更される可能性がありますが、次のファイルシステムは考えられません)。このようなことが起こります)。一部のファイルシステムでは、通常、ファイル名またはファイルが生成された順序、またはそれらの組み合わせで順序を推論できますが、ファイルシステムの詳細を知る必要があり、ドライバによって異なる場合があります。バージョン。巡回順序は信頼できるものではありません。
ファイル名に基づいてアルファベット順にファイルを記録またはソートしますls
。ソートされていません。echo *
find
ls -f
信頼できることの1つは、パラメータが順次処理されることです。したがって、まだ部分的に存在する場合は影響を受けていないというC/
意味です。Dest/
消えたら、C/
ディレクトリの変更時間を確認し、削除時間またはコピー終了時間と比較すると、ファイルが削除された場所を知ることができます。削除される最初のファイルは、検索される最初のエントリがディレクトリであるかどうかに応じて、階層に直接存在するファイルでも、階層の奥にあるファイルでもかまいません。Dest/
C/
Dest/
Dest/
rm
速度はrm
主に削除するファイルの数によって異なります。非常に大きなファイルは削除時間だけに大きな影響を与えます。ほとんどの作業は、各ディレクトリエントリを順番に削除することです。ファイルのデータは削除されません。ファイルの内容を削除すると、使用中のブロックが無料で表示されるため、比較的高速です。
答え2
Gillesが言ったように、通常、ディレクトリ内の削除順序を予測することはできず、最上位ディレクトリだけがコマンドラインの順序で処理されます。
ただし、Unixでは空のディレクトリのみを削除できるため、ディレクトリ階層が下から上に削除されることを保証することもできます。したがって、ディレクトリを削除する前に、その中にあるすべてのコンテンツを削除する必要があります。サブディレクトリが含まれている場合は、まずコンテンツを削除する必要があります。