ウェブサイト検索

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システム上で数千のファイルを含む大きなディレクトリをどのように削除できるかを見てきました。

関連記事: