rm -rを使用して再帰的に削除する方法は?どんな順序で?

rm -rを使用して再帰的に削除する方法は?どんな順序で?

作業順序はあります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秒もかかりませんでした。ないと思って入ってみましたが、ところで見ると完全で、timermcpDest/登場影響を受けないように。A/ B/ C/小さすぎてちょっと驚きですね。合計サイズは100〜200 MBです。Dest/だが1TBに少し及ばない水準だ。 Dest /を実行すると、lsアルファベットの両端にファイルとディレクトリがあることがわかります(たとえばAFile.txt... Zoo.txt)。

幸運なので、rmDest /ディレクトリに大きなダメージを与える前にキャンセルしましたか?本当にそんなに遅いですかrm(マッソッサ!)?

rmそれ以外の場合は、欠落している項目を推測できるように再帰的に項目を削除するにはどうすればよいですか?

私は失われたものを取り戻すことをあまり期待していません。

ベストアンサー1

rm -r各パラメータは順番に処理されます。引数がディレクトリの場合は、ディレクトリを一覧表示します(opendirそしてreaddir関数または同等の方法)各項目に対して順番に動作します。項目がディレクトリの場合は、その項目を再帰的に移動します。

これは、他のアプリケーションがディレクトリなどを再帰的に移動するために使用するのとまったく同じ方法ですfindls -Rf

巡回順序は予測できません。ほとんどのファイルシステムでは、ディレクトリにファイルを追加、削除、または名前を変更しない限り、順序を再現できます(理論的には、順序は完全にランダムで毎回変更される可能性がありますが、次のファイルシステムは考えられません)。このようなことが起こります)。一部のファイルシステムでは、通常、ファイル名またはファイルが生成された順序、またはそれらの組み合わせで順序を推論できますが、ファイルシステムの詳細を知る必要があり、ドライバによって異なる場合があります。バージョン。巡回順序は信頼できるものではありません。

ファイル名に基づいてアルファベット順にファイルを記録またはソートしますls。ソートされていません。echo *findls -f

信頼できることの1つは、パラメータが順次処理されることです。したがって、まだ部分的に存在する場合は影響を受けていないというC/意味です。Dest/消えたら、C/ディレクトリの変更時間を確認し、削除時間またはコピー終了時間と比較すると、ファイルが削除された場所を知ることができます。削除される最初のファイルは、検索される最初のエントリがディレクトリであるかどうかに応じて、階層に直接存在するファイルでも、階層の奥にあるファイルでもかまいません。Dest/C/Dest/Dest/rm

速度はrm主に削除するファイルの数によって異なります。非常に大きなファイルは削除時間だけに大きな影響を与えます。ほとんどの作業は、各ディレクトリエントリを順番に削除することです。ファイルのデータは削除されません。ファイルの内容を削除すると、使用中のブロックが無料で表示されるため、比較的高速です。

おすすめ記事