Linuxでファイルを含む大きなディレクトリを削除する方法
ファイル管理は、ユーザーがLinuxシステム上で行う一般的なタスクの一つであり、ファイルやディレクトリの作成、コピー、移動、修正、削除を含みます。
この記事では、Linuxシステムで数千のファイルを含む大きなディレクトリを削除する方法について、いくつかのコマンドラインのヒントを提供します。
Linuxでファイルを削除する
Linuxシステムでファイルを削除する最も一般的な方法は、次のような構文形式を持つrmコマンドを使用することです:
$ rm [ options ] sample_file.txt
例えば、file1.txtというテキストファイルを削除するには、次のコマンドを実行します:
$ rm file1.txt
ファイルを強制的に削除するには、次のように-fフラグを渡してください。
$ rm -f file1.txt
Linuxでディレクトリを削除する
ディレクトリ sample_directory を削除するには、次のコマンドを実行します:
$ rm -rf sample_directory
-rオプションは、ディレクトリとそれに含まれるすべてのサブディレクトリおよびファイルを再帰的に削除します。
空のディレクトリを削除または取り除くには、rmdirコマンドを使用します。これは、test_directoryという空のディレクトリを削除したいときに便利です。
$ rmdir test_directory
大量のファイルを含む大きなディレクトリを削除する
rmコマンドが実行されると、ファイルシステムはファイルへのリンクのみを削除し、ユーザーにとってファイルが利用できなくなりますが、実際にはファイルのデータ自体はディスク上に残っています。
したがって、rmコマンドが発行されると、ファイルへの参照のみが削除され、ファイルシステム内のストレージブロックが解放されます。
そのため、Linuxでファイルを削除するためのいくつかの方法があります。
Linuxでinode番号を持つファイルを削除する
例えば、inode番号を使用してファイルを削除することができます。statコマンドを使用してファイルのinode番号を確認することができます。
$ stat file1.txt
File: file.txt
Size: 4076 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1573697 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ tecmint) Gid: ( 1000/ tecmint)
Access: 2023-05-08 12:10:55.656070248 +0530
Modify: 2023-05-08 12:10:55.656070248 +0530
Change: 2023-05-08 12:10:55.656070248 +0530
さらに、ディレクトリ内のファイルをリストする際に、lsコマンドで-iフラグを渡すことができます。
$ ls -li
1573697 .rw-rw-r-- tecmint tecmint 4.0 KB Mon May 8 12:10:55 2023 file1.txt
イノードを使用してファイルを削除するには、以下の構文に示すようにfindコマンドを使用してください。
$ find /path/to/file -inum INODE_NUM -exec rm -i {} +
私たちの例では、現在のディレクトリにあるファイルfile1.txtを削除するためのコマンドは次のようになります:
$ find /path/to/file -inum 1573697 -exec rm -i {} +
削除を確認するには'y'を押し、ENTERを押してください。
では、数千のファイルを含む大きなディレクトリを削除する方法を見てみましょう。
何千ものファイルを持つディレクトリを作成する
古くからあるrmコマンドは、何千ものファイルを含む大きなディレクトリを削除するのに最も早い方法です。これを示すために、まずサンプルディレクトリを作成し、その中に移動します。
$ mkdir test_dir
cd test_dir
次に、以下のbash forループを使用して、500,000 のテキストファイルを作成します。
$ time for item in {1..500000}; do touch file_name$item.txt; done
注意: 上記のコマンドはリソースを大量に消費するため、かなりのCPUとRAMを使用します。また、システムの仕様によっては、実行にかなりの時間がかかります。私の場合、4GBのRAMと3つのCPUを持つ仮想マシン(VM)で実行しています。
Linuxでディレクトリを削除する最速の方法
大きなディレクトリを削除する最も速い方法は、以下に示すように、昔ながらのrmディレクトリを使用することです。ここで、timeオプションはコマンドを成功裏に実行するのにかかった時間を表示します。
$ time rm -rf /test_dir
出力から見ると、ディレクトリ全体を削除するのに約6秒かかったことがわかります。
findコマンドで大きなディレクトリを削除する
大きなディレクトリを削除する別の方法は、以下の構文に示されているようにfindコマンドを使用することです。
$ time find /path/to/directory -delete
<strong>rm</strong>コマンドほど速くはないが、それでも仕事を成し遂げる。
$ time find test_dir -delete
Perlコマンドで大きなディレクトリを削除する
もう一つのアプローチは、ディレクトリ内でPerlスクリプト言語を使用して大量のファイルを削除することです。
$ cd test_dir
time perl -e 'for(<*>){((stat)[9]<(unlink))}'
出力から、以前観察したコマンドよりもディレクトリ内のすべてのファイルを削除するのにずっと時間がかかったことがわかります。
結論
これがその内容です。このガイドでは、Linuxシステム上で数千のファイルを含む大きなディレクトリをどのように削除できるかを見てきました。




