そのディレクトリからそれらを削除する最も速い方法は、それらをそこから移動することです。その後、バックグラウンドでそれらを削除するだけです:
mkdir ../.tmp_to_remove
mv -- * ../.tmp_to_remove
rm -rf ../.tmp_to_remove &
これは、現在のディレクトリがマウントされたパーティションのトップレベルではないことを前提としています (つまり、その 08
は同じファイルシステムにあります)。
18
26
の後 33
で始まるファイル/ディレクトリ名がある場合は、(Stéphane によって編集されたとおり) が必要です。 .
上記は、サブディレクトリを再帰的に処理する必要がないため、現在のディレクトリからファイルを一瞬で削除します。ファイルシステムからのツリーの実際の削除には時間がかかりますが、邪魔にならないので、実際の効率はそれほど重要ではありません。
48
驚くほど速くて簡単です。最初に空のディレクトリを作成する必要があります。
mkdir emptydir rsync -a --delete emptydir/ yourdirectory/
53
ファイルを削除するディレクトリです。
65
の 1 つの問題 、またはより正確な同等の 78
シェルは最初に、現在のディレクトリ内のすべての (非表示でない) ファイルを一覧表示し、それらを並べ替えて 84
に渡します。 、現在のディレクトリ内のファイルのリストが大きい場合、不要な余分なオーバーヘッドが追加され、ファイルのリストが大きすぎる場合は失敗することさえあります.
通常は 98
とします 代わりに(隠しファイルも削除できるという利点もあります)。しかし、ほとんどの 105
すべての POSIX 準拠のものを含む実装は、それを拒否します。その理由は、一部のシェル (すべての POSIX シェルを含む) には、116
の展開という誤った機能があるためです。 glob には 121
が含まれます と 138
.つまり、148
現在のディレクトリと親ディレクトリを削除するため、157
これらのシェルの不具合を回避するために修正されました.
160
のような一部のシェル (およびその他の Forsyth シェルの派生物)、170
または 184
その欠点はありません。 198
203
があります 214
で有効にできるビルトイン 223
以来 の 236
246
は含まれません 259
でもありません 263
で問題なく動作します .だから 274
、できること:
autoload zsh/files
rm -rf .
Linux では、次のことができます:
rm -rf /proc/self/cwd/
現在のディレクトリを空にするか、
rm -rf /dev/fd/3/ 3< some/dir
任意のディレクトリを空にします。
(末尾の 285
に注意してください )
GNU システムでは、次のことができます:
find . -delete
ここで、現在のディレクトリにいくつかのエントリしかなく、ファイルの大部分がサブディレクトリにある場合、大きな違いはなく、297
おそらくあなたが得ることができる最も速いでしょう。 306
に期待されます (またはすべてのファイルを削除するもの)は、すべてのディレクトリのコンテンツを読み取って 312
を呼び出すことを意味するため、コストがかかります すべてのエントリで。 325
削除されたファイルの i ノード、ファイルを含むディレクトリ、ファイル システム マップ、またはその他の空き領域を変更する必要があるため、それ自体が非常に高くつく可能性があります。
338
と 342
(少なくとも GNU 実装では) すでに各ディレクトリの inode 番号でファイルのリストを並べ替えています。これは、ext4 ファイル システムでのパフォーマンスの点で大きな違いを生む可能性があります。相互に) inode は順番に変更されます。
356
ファイルを名前でソートすると、名前順が inum 順と一致しない限り (ファイル名のソートされたリストからファイルが作成された場合など)、パフォーマンスが大幅に低下する可能性があります。
365
の理由の 1 つ 373
または 389
もう少し最適化するには:
ディレクトリ ツリーの最大深度がわかっている場合は、それを 391
に渡すことができます。 :
find . -maxdepth 3 -delete
401
を節約できます ディレクトリの内容を深さ 3 で読み取ろうとする必要があります。