如何在 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 编号的文件
例如,您可以使用文件的索引节点号删除文件。您可以使用 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
要使用其 inode 删除文件,请使用 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 循环创建 500,000 文本文件。
$ time for item in {1..500000}; do touch file_name$item.txt; done

在 Linux 中删除目录的最快方法
删除大目录的最快方法是使用旧的 rm 目录,如下所示。此处,时间选项显示成功执行命令所花费的时间。
$ time rm -rf /test_dir

从输出中,您可以看到删除整个目录大约用了 6 秒。
使用查找命令删除大目录
删除大目录的另一种方法是使用 find 命令,如以下语法所示。
$ time find /path/to/directory -delete
虽然不如 rm 命令快,但它仍然可以完成工作。
$ time find test_dir -delete

使用 Perl 命令删除大目录
另一种方法是在目录中使用 Perl 脚本语言来删除大量文件。
$ cd test_dir
$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'

从输出中,您可以看出删除目录中的所有文件所花费的时间比我们之前查看的先前命令要长得多。
结论
你有它。在本指南中,我们了解了如何删除 Linux 系统上包含数千个文件的大型目录。