在UNIX中列出带有模式的1到20个文件名

时间:2014-02-18 18:35:49

标签: shell unix

我在UNIX Shell中有以下命令,用于列出当前目录中带有后缀模式1到9的文件

ls cat[1-9]

输出 cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8 cat9

但是当我尝试使用以下命令时,我得到了意想不到的结果

ls cat[1-10]

输出 的 CAT1

相反,我应该将cat1发送到cat10所有文件

2 个答案:

答案 0 :(得分:5)

您可以使用list glob

ls cat{1..9}

排除cat7

使用:

ls cat{{1..6},{8,9}}

或者其他:

ls cat[^7]

答案 1 :(得分:0)

你的glob表达式匹配一个字符列表,而不是数字。 cat[1-10]将匹配名为'cat1'(cat1到cat1)和'cat0'的文件,就是这样。您可以使用大括号扩展cat{1..10},但这将扩展此类文件是否确实存在,因此您最终可能会在脚本中找到文件未找到错误。唯一可以确定的方法是直接过滤列表:

cats=()
for cat in cat[0-9]*; do
  if [[ ${cat#cat} ^= *[^0-9]* ]]; then # if the part after "cat" is numeric
    cats+=("$cat")
  fi
done