Shell 在UNIX中列出1到20个带模式的文件名
在unixshell中,我有以下命令列出当前目录中后缀模式为1到9的文件Shell 在UNIX中列出1到20个带模式的文件名,shell,unix,Shell,Unix,在unixshell中,我有以下命令列出当前目录中后缀模式为1到9的文件 ls cat[1-9] 输出 cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8 cat9 但当我尝试使用下面的命令时,我得到了意想不到的结果 ls cat[1-10] 输出 cat1 相反,我应该获取cat1到cat10所有文件您可以使用列表glob: ls cat{1..9} 要排除cat7: 使用: 否则: ls cat[^7] 您可以使用列表glob: ls cat{1..9}
ls cat[1-9]
输出
cat1 cat2 cat3 cat4 cat5 cat6 cat7 cat8 cat9
但当我尝试使用下面的命令时,我得到了意想不到的结果
ls cat[1-10]
输出
cat1
相反,我应该获取cat1到cat10所有文件您可以使用
列表glob
:
ls cat{1..9}
要排除cat7:
使用:
否则:
ls cat[^7]
您可以使用
列表glob
:
ls cat{1..9}
要排除cat7:
使用:
否则:
ls cat[^7]
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
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
[1-9]
是一个字符范围,而不是数字。[1-9]
是一个字符范围,而不是数字。如果我想从这个列表中排除cat7文件,该怎么办?抱歉,我不理解这个要求。ls cat{{{1..6},{8..10}
@Graeme:非常感谢,hsaka:这是你要找的吗?是的,非常感谢,以前有人告诉我使用ls cat[1-6,8-10],但它没有给我确切的输出。谢谢@Graeme,如果我想把cat7文件从这个列表中排除怎么办对不起,我不理解这个要求。ls cat{1..6},{8..10}
@Graeme:非常感谢,hsaka:这是你要找的吗?是的,非常感谢,以前有人告诉我使用ls cat[1-6,8-10],但它没有给我确切的输出。谢谢你@Graeme