在 Linux 中删除空文件和空目录


概述

我们将学习如何在 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 任务来从我们的系统中删除空文件夹和子文件夹。这样,我们计算机上就不会积累空文件夹和子文件夹。

更新于: 2022-12-23

9K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.