如何列出空文件?(击)

Rem*_*i.b 2 bash performance awk file find

为了列出我做的空文件

find . -name "*.txt" | xargs wc -l | awk -F" " '{if ($1==0) {print $2} }'
Run Code Online (Sandbox Code Playgroud)

或者干脆

wc -l *.txt | awk -F" " '{if ($1==0) {print $2} }'
Run Code Online (Sandbox Code Playgroud)

它可以工作,但它有点慢,因为wc -l计算每个文件中的换行符的数量,而这是不必要的.一旦找到单个换行符就排除文件的过程会快得多.

如何以高效的方式列出空文件?

Jon*_*ler 10

find . -name '*.txt' -size 0
Run Code Online (Sandbox Code Playgroud)

打印匹配*.txt且大小为零的文件.

  • 对于某些“更多”的微小值,“-size 0c”可能更有效。(“find”不需要先将文件大小除以 512,然后将结果向上舍入。) (2认同)

Joh*_*024 5

要查找当前目录中的所有空文件:

find . -maxdepth 1 -type f -name '*.txt' -empty
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • find .

    这开始find在当前目录中查找文件.

  • -maxdepth 1

    默认情况下,find通过子目录递归搜索.这告诉它不要.如果您确实需要递归搜索,只需删除此选项即可.

  • -type f

    这会将搜索限制为常规文件.

  • -name '*.txt'

    这会将搜索范围限制为.txt文件.

  • -empty

    这会将搜索限制为空文件.

  • @JonathanLeffler 问题中的示例之一是“wc -l *.txt”,它将搜索限制为当前目录。当然,删除“maxdepth”提供了递归解决方案。 (2认同)
  • 好吧,很公平——主要的例子没有使用这个限制。这是一个小小的狡辩。与 POSIX [`find`](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html) 相比,使用 `-empty` 代替 `-size 0` 是一个(GNU `find`)扩展,虽然 Mac OS X (BSD) `find` 也支持它。我认为它们是单独的实现——Mac OS X 版本不响应 `find --version`,但 GNU 版本会。 (2认同)