显示与特定文件名模式不匹配的文件数

显示与特定文件名模式不匹配的文件数

我有一些非标准和标准文件名,如下所示。我需要获取不标准文件的数量..

标准文件名:XYZABC.txt,XYZABC.csv、*.msg

非标准文件名: 989875.txt 或 myname.csv ;这没有界限,可以是任何东西..

唯一好的部分是我知道标准的,我只需要对简单的 find 命令执行 NOT 条件即可。我该怎么做。对执行文件循环等不感兴趣。

答案1

给定

$ ls
 989875.txt   myname.csv  'some long.msg'   XYZABC.csv   XYZABC.txt

然后

$ find . ! \( -name 'XYZABC.*' -o -name '*.msg' \)
.
./myname.csv
./989875.txt

例如

$ find . -type f ! \( -name 'XYZABC.*' -o -name '*.msg' \) -printf '1' | wc -c
2

答案2

您可以列出文件ls -1并执行 agrep -v以排除不满足条件的文件。由于您只想要一个计数,因此您可以通过管道将其传递wc -l并获取计数。例如

ls -1 | grep -v XYZABC | wc -l

唯一的问题是它还包括第一行,即total.您可以从计数中减 1,或者将输出发送到tail +2before wc

egrep您可以使用as来处理多种模式

ls -1 | egrep -v "(XYZABC|.msg)" | tail +2 | wc -l

相关内容