我想 ls 文件名中包含子字符串“s1r”、“s2r”、“s3r”或“s19r”的文件。
我快到了!
拙劣的尝试:
ls *s[123][9?]r*
上面只给我包含子字符串的文件
s19r
尽管
ls *s[1-3]|[19]r*
回报
-bash: [19]r*: 未找到命令
ls: *s[1-3]: 没有那个文件或目录
也就是说,它不识别或 |运算符 - 这是有道理的,因为它也用于管道。
如何获取包含“s1r”、“s2r”、“s3r”或“s19r”的文件?
答案1
使用ls *s1r* *s2r* *s3r* *s19r*
。
如果您关心不存在的文件,您可以设置 nullglob 选项:
nullglob
If set, bash allows patterns which match no files (see
Pathname Expansion above) to expand to a null string,
rather than themselves.
如果你的 shell 不是 bash,可能有类似的方法。看看它的手册页。
答案2
你可能想尝试这个:
ls *s?([123])r* *s19r*
例如
我有一个包含以下文件的目录:
% ls | column
s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r
s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
使用上面提到的 ls:
% ls *s?([123])r* *s19r*
s19r s1r s2r s3r
请参阅bash 模式匹配手册更多细节。