如何按大小和扩展名搜索文件?

Fra*_*ter 5 command-line find search

我想从目录及其所有子目录中删除具有特定扩展名的所有空文件。

小智 10

您可以尝试以下操作,在删除每个文件时进行确认:

$ find /path/to/dir -type f -name "*.txt" -empty -ok rm {} \;
Run Code Online (Sandbox Code Playgroud)

或者如果你觉得更有信心:

$ find /path/to/dir -type f -name "*.txt" -empty -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

  • 在较新版本的 `find` 上,`-delete` 选项会更简单。 (3认同)

Gil*_*il' 6

通常,“我如何……在目录及其子目录中”的答案涉及find. 使用-type f匹配常规文件,-name '*.ext'以限制到特定的扩展,并-size 0限制对空文件。

find /some/dir -name '*.ext' -type f -size 0 -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

如果您的版本find太旧,您可能需要 '... -exec rm {} \;' 相反(使用+速度更快,因为它rm一次调用多个文件)。在 Linux、FreeBSD、NetBSD 和 OSX 下,您可以使用find的内置-delete操作和-empty谓词(相当于-size 0在常规文件上):

find /some/dir -name '*.ext' -type f -empty -delete
Run Code Online (Sandbox Code Playgroud)

在 zsh 中,您可以使用**glob 递归到子目录和glob 限定符以将匹配限制.为大小为 0 ( L0) 的常规文件( )。

rm /some/dir/**/*.ext(.L0)
Run Code Online (Sandbox Code Playgroud)