我想获取目录及其子目录中所有文件的计数,但我不希望它计数 .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
(withLC_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}'
。或者使用 GNUfind
:find ... -printf . | wc -c
。