我想列出名称模式的文件,如[max | min] .txt,所以执行
在bash shell中ls [max|min].txt
,但它不起作用,我得到的错误信息是:
ls:无法访问[max:没有此类文件或目录
那么做这项工作的正确方法是什么?
答案 0 :(得分:4)
方括号用于字符匹配,垂直条用于管道。您正在寻找brace expansion。
ls {max,min}.txt
答案 1 :(得分:1)
Bash有一个名为extglob
的shell选项,您可以使用命令shopt -s extglob
启用它。这将允许您使用模式格式@(pattern-list)
,其中pattern-list
是以管道分隔的模式列表。它将与文件名匹配,并将排除任何与文件名不匹配的模式,就像[abc]
范围表达式一样。 Bash也有大括号扩展,但这似乎不是你要求的,因为大括号扩展与文件名不匹配或像通配符或范围表达式一样扩展。
$ shopt -s extglob
$ touch max.txt min.txt
$ echo @(max|min).txt
max.txt min.txt
$ echo @(min|mid|max).txt
max.txt min.txt
$ echo {min,mid,max}.txt
min.txt mid.txt max.txt
有关上述命令序列的几点注意事项:
echo @(mid|min|max).txt
未输出mid.txt
,因为没有匹配的文件。echo @(min|mid|max).txt
以与通配符扩展相同的方式重新排序要排序的输出。echo {min,mid,max}.txt
是大括号展开,按照给定的顺序输出所有元素。