在Linux中删除空文件和目录
1. 概述
在本教程中,我们将学习如何在 Linux 上删除空文件和目录。
空文件是零字节大小的文件。空目录是不包含任何文件或目录的目录。公平地说,空文件不会占用空间,但我们应该不时清理文件系统作为最佳实践。
本教程中讨论的所有命令都是特定于 Linux 的,不适用于 Windows。
2. 删除目录中的空文件
我们可以使用find 命令删除给定目录中的所有空文件:
$ find . -type f -empty -print -delete
为了删除空文件,我们需要执行两个步骤。首先,搜索给定目录中的所有空文件,然后删除所有这些文件。
命令的这个特定部分,find 。-type f -empty -print,将递归查找给定目录中的所有空文件。然后,我们添加*-delete*选项来删除所有这些文件。
让我们尝试通过一个例子来理解这一点。
考虑一个包含空文件和非空文件和子目录的目录。这里,以data-file为前缀的文件为非空文件,以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 和 mydir2 目录中的empty - file5 和empty - file6也将分别被删除:
$ find . -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir1/empty-file5
./mydir2/empty-file6
./empty file 4
让我们仔细观察输出。我们会注意到该命令已删除名称中包含空格的文件(在我们的示例中为“空文件 4 ”)。
此外,该命令只删除了空文件,而不是mydir3 和mydir5 等空目录。
3. 空文件的非递归删除
到目前为止,我们已经讨论了在目录中递归删除空文件的场景。如果我们需要删除当前目录中的空文件而不是子目录中的空文件怎么办?
find命令有一个选项*-maxdepth* ,它定义了find命令应该搜索文件的最大目录级别数。
使用*-maxdepth 1*,find命令将仅在当前目录中搜索文件:
$ find . -maxdepth 1 -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./empty file 4
4.删除所有空目录
我们可以使用*-type d和find*命令来搜索目录:
$ find . -type d -empty -print -delete
这将递归地删除当前目录中存在的所有空目录。
让我们在与上述相同的文件系统中运行此命令:
$ find . -type d -empty -print -delete
./mydir3
./mydir4/mydir5
./mydir4
再次,仔细注意输出。mydir4目录也被删除了,因为删除mydir5目录后,mydir4变成了一个空目录(再次仔细观察目录结构)。
5. 空目录的非递归删除
使用*-maxdepth 1*,我们可以限制find命令只搜索当前目录中的空目录:
$ find . -maxdepth 1 -type d -empty -print -delete
./mydir3
6. 一起删除空文件和目录
现在是时候结合我们迄今为止所学的一切了。让我们使用单个命令删除当前目录中存在的所有空文件和目录。
我们将使用逻辑 OR 运算符-o和find*命令来搜索空文件和目录*:
$ 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 1*以非递归方式删除空文件和目录*:
$ find . -maxdepth 1 -type d -empty -print -delete -o -type f -empty -print -delete
./empty-file1
./empty-file2
./empty-file3
./mydir3