在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