我有一些非标准和标准文件名,如下所示。我需要获取不标准文件的数量..
标准文件名: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 +2
before wc
。
egrep
您可以使用as来处理多种模式
ls -1 | egrep -v "(XYZABC|.msg)" | tail +2 | wc -l