Shell脚本如何读取文件夹中不含notsoideal的指定命名文件?
筛选符合特定命名规则的Shell文件
方法1:Bash扩展通配符(glob)
如果使用Bash,先开启扩展通配符支持(不确定是否开启时执行以下命令):
shopt -s extglob
使用以下模式匹配目标文件:
ABC?????_?_good_!(*notsoideal*).txt
ABC?????:匹配ABC后接5个任意字符(对应你例子里的5位数字)_?_:匹配中间的单个数字段(如_1_、_2_)!(*notsoideal*):排除文件名包含notsoideal的文件.txt:限定文件后缀
若要严格限定数字,可改为:
ABC[0-9][0-9][0-9][0-9][0-9]_[0-9]_good_!(*notsoideal*).txt
方法2:find命令(跨Shell通用)
find支持正则表达式,能精准匹配你的规则:
find . -maxdepth 1 -type f -regextype posix-extended -regex './ABC[0-9]{5}_[0-9]_good_[0-9a-zA-Z]{4}\.txt'
参数说明:
-maxdepth 1:仅搜索当前目录,不递归子文件夹-type f:只匹配文件,忽略目录-regextype posix-extended:启用扩展正则语法,支持{n}重复次数匹配-regex后的规则:[0-9]{5}:匹配ABC后5位数字_[0-9]_:匹配中间单个数字的分隔段[0-9a-zA-Z]{4}:匹配_good_后4位字母/数字\.txt:匹配文件后缀(正则中.需转义)
方法3:ls+grep组合过滤
如果仅需查看结果,可通过管道组合命令:
ls ABC*.txt | grep -v 'notsoideal' | grep 'ABC[0-9]\{5\}_[0-9]_good_[0-9a-zA-Z]\{4\}\.txt'
grep -v 'notsoideal':过滤掉包含notsoideal的文件名- 第二个
grep用正则精准匹配符合规则的文件名
内容的提问来源于stack exchange,提问作者newstudenttoprogramming
相关产品推荐
相关产品推荐

