在 Linux 中删除空文件和目录

linuxopen sourceoperating system更新于 2026/1/27 19:37:17

概述

我们将学习如何在 Linux 中删除空目录和空文件。

空目录不占用任何磁盘空间,但保持其整洁是有益的。我们应该定期清理旧文件和文件夹。

本教程中的所有说明均适用于 Linux 系统。它们不适用于 Windows。

删除目录中的空文件

您可以使用 `find` 命令删除现有文件夹中的所有空文件。

$ find . -type f -empty -print -delete

要删除空目录,我们首先需要在指定文件夹中搜索所有空文件夹,然后将其删除。

要查找当前目录中的所有空目录,请使用以下命令:find. −type d −empty −print | xargs rm −rf。添加 −delete 选项可删除它们。

我们举个例子来更好地解释这个概念。

可以考虑一个同时包含空和非空文件的目录。这里,以 data-filename 为前缀的文件是非空文件,以 empty 为前缀的文件是空文件。

|--  data-file1
|--  data-file2
|--  empty-file1
|--  empty-file2
|--  empty-file3
|--  empty file 4
|--  mydir1
|    |-- data-file3
|    `-- empty-file5
|--  mydir2
|    |-- data-file4
|    `-- empty-file6
`-- mydir3
`-- mydir4
   `-- mydir5

我们现在在这些目录中运行上述命令。它将递归删除所有空文件 - 这意味着目录 mydir1 和 mydird2 中的 empty-file4 和 empty-file5 也将被删除。

$ find . -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir1/empty-file5
./mydir2/empty-file6
./empty file 4

让我们仔细看看输出。我们会发现此操作从目录中删除了名称包含空格的文件。

它只删除了空文件,而没有删除 mydir1、mydir2、mydir4 和 mydir6 等目录。

非递归删除空文件

到目前为止,我们已经讨论了如何递归地从目录中删除空文件。但是,如果我们想从当前目录中删除空文件呢?

find 实用程序有一个选项 -maxDepth,它定义了 find 实用程序搜索文件的最大深度。

使用 -maxdepth1,'f'(文件)命令将仅在当前目录中搜索文件。

$ find . -maxdepth 1 -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./empty file 4

删除所有空目录

我们可以在 find 命令中使用 -type f 来搜索文件 -

$ find . -type d -empty -print -delete

它将从当前目录中删除所有空目录。

让我们在保存脚本的目录中运行此命令。

$ find . -type d -empty -print -delete
./mydir3
./mydir4/mydir5
./mydir4

删除 mydir5 文件夹后,mydir3 不再是空目录;相反,它包含来自 mydir2 的文件。

非递归删除空目录

通过使用 −maxdepth 1,find 实用程序仅在当前工作目录中搜索空目录。

$ find . -maxdepth 1 -type d -empty -print -delete
./mydir3

同时删除空文件和目录

现在终于到了将我们目前所学知识结合起来的最佳时机。运行一个命令,删除当前目录中的所有空文件和文件夹。

我们将使用 find 实用程序的逻辑或 (OR) 运算符 (-o) 来搜索空文件或空目录。

$ find . -type d -empty -print -delete -o -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir1/empty-file5
./mydir2/empty-file6
./mydir3
./mydir4/mydir5
./mydir4

-o 选项将文件名中的命令拆分为两部分。第一部分,-type d -empty - print -delete,删除所有空目录;第二部分,-type f -empty - print - delete,删除所有空文件。

我们可以使用 -maxdepth 0 递归删除空文件/目录。

$ find . -maxdepth 1 -type d -empty -print -delete -o -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir3

总结

到这里,我们了解了空文件、空文件夹以及如何在 Linux 中删除它们。我们研究了两种不同的文件删除方法——递归和非递归。

在删除目录之前,务必检查所有目录并删除所有不必要的目录。在上面讨论的所有示例中,我们可以使用 -recurse 选项来检查所有要删除的目录。

最佳做法是设置一个 cron 任务来从系统中删除空文件夹及其子文件夹。这样,我们的电脑上就不会堆积空文件夹及其子文件夹了。


相关文章


有用资源