
我想 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 模式匹配手冊更多細節。