Linux 中的文件计数

Linux 中的文件计数

我想获取目录及其子目录中所有文件的计数,但我不希望它计数 .zip 文件。所以我想是这样的:

find . -iname "*.zip" -type f 2> /dev/null | wc -l

除了向后 - 只会返回 .zip 文件,而且我只想计算其他文件。

答案1

LC_ALL=C find .//. ! -iname '*.zip' -type f 2> /dev/null |
  LC_ALL=C grep -c //

统计名称不以.zip.

一些注意事项:

  • find要否定表达式中的测试,只需!在其前面添加即可。一些find实现也支持-not这一点,尽管这不是标准的,也不是可移植的。
  • 您想要禁用find(with LC_ALL=C) 的本地化以查找以 结尾的文件名,.zip即使文件名不构成用户区域设置中的有效文本。此外,大写字符i取决于区域设置(在某些情况下是I,在其他情况下是İ)。在 C 语言环境中,它是I.使用 -name '*.[zZ][iI][pP]'将使其标准化且更具确定性。
  • 文件路径可以由多行组成,使用wc -l它们来计数没有意义。在这里,我们使用find .//.so 来//在每个文件路径中查找唯一的东西 ( ) ,我们用 来计数grep -c。使用 GNU 工具,您也可以使用find ... -print0 | sed -z '$=',但如果找到 0 个文件,则不会给出任何输出。find ... -print0 | tr -cd '\0' | wc -c会更好(但数字周围可能有空格)。也可以看看find ... -print0 | gawk -v 'RS=\0' 'END{print NR}'。或者使用 GNU find: find ... -printf . | wc -c

相关内容