Contents

在Linux中删除零字节文件

1. 概述

在本教程中,我们将了解在 Linux 中删除大小为零的文件的方法。

2. 查找 0 字节文件

让我们首先使用find 命令搜索主目录中的所有 0 字节文件:

$ find /home/blogdemo -size 0
/home/blogdemo/log
/home/blogdemo/test/logging.log
/home/blogdemo/job.txt

find从我们指定的路径开始搜索所有文件、目录和子目录。-size选项将找到的文件限制为使用少于、多于或恰好n个空间单位的文件,向上舍入。如果我们不指定任何单位,大小的默认单位将是使用的块数。所以,如果我们想要文件大小正好为 0 字节,我们应该使用*‘c’*后缀,它是字节:

$ find /home/blogdemo -size 0c

3. 使用find

如果我们有很长的 0 字节文件列表,我们可以使用find命令搜索它们并使用*-delete*选项删除所有文件

$ find /home/blogdemo -size 0c -delete

在使用-delete选项之前检查find*结果总是更好*:

$ find /home/blogdemo -size 0c

请注意,find将转到所有目录和子目录(在我们的示例中为test目录)并删除从*/home/blogdemo*开始的所有文件。我们可以通过设置-maxdepth选项来限制这个功能。

3.1. 使用*-maxdepth*

-maxdepth选项告诉find命令从/home/blogdemo*目录开始搜索具有深度限制的文件:*

$ find /home/blogdemo -maxdepth 1 -size 0c -delete

让我们检查未删除的文件:

$ find /home/blogdemo -size 0c 
/home/blogdemo/test/logging.log

因为我们设置了* -maxdepth*,所以这次find没有进入test目录。因此,logging.log文件仍然存在。

3.2. 使用*-name*

如果我们只想在当前目录中搜索并过滤具有特定名称的文件,我们可以使用-name 选项

$ find /home/blogdemo -maxdepth 1 -size 0c -name "log*" -delete

此命令仅删除名称以“log”开头的文件。

3.3. 使用*-exec*

在旧版本的find中,-delete选项可能不可用。在这种情况下,我们可以使用-exec 选项。在这里,-exec允许我们执行rm 命令并删除找到的文件:

$ find /home/blogdemo -maxdepth 1 -size 0c -exec rm '{}' \;

** -exec之后的字符串“ {} ”被找到的文件名替换**。请注意,我们将大括号括在单引号中,以防止它们被解释为 shell 脚本标点符号。

另外,请注意,在我们的命令及其所有必需参数的末尾,我们应该使用 ‘;’ 指定命令的结束。我们还通过使用’'来保护分号不被shell 扩展。在分号 (’;’) 周围使用单引号可提供相同的保护。

3.4. 命令顺序

过滤文件和删除文件的命令顺序很重要。因此,如果我们在限制文件大小之前使用*-delete-exec*选项,find将忽略所有其他选项。因此,目录中的所有文件都将被删除:

$ find /home/blogdemo -delete -maxdepth 1 -size 0c