要列出以 10 或 11 或 12 结尾的所有文件,我已经尝试过ls *[10-12],ls *[10,11,12]但这些都不起作用。我不知道为什么。谁能帮我?
Sté*_*las 15
[...]如果它在指定的集合中,则匹配一个字符(某些 shell 中的整理元素)。
[10-12]表示1来自0to1或 character2的一个或多个字符,因此与[102]或[0-2]¹相同。
[10,11,12]意思是1, 0, ,, 1... 所以与[,0-2].
在这里你想要:
ls -d -- *1[0-2]
Run Code Online (Sandbox Code Playgroud)
也就是说,以 1 后跟任何0,1或2字符结尾的(非隐藏)文件名。
现在要注意它也匹配foo110或foo112345612。
如果你不想那样,那么你需要这样的东西:
ls -d -- *[!0-9]1[0-2] 1[0-2]
Run Code Online (Sandbox Code Playgroud)
然而,这不匹配 foo010
如果出于foo10, foo00010,foo110您想要foo10和foo00010匹配,则使用kshorbash -O extglob或zsh -o kshglob:
ls -d -- !(*[0-9])*(0)1[0-2]
Run Code Online (Sandbox Code Playgroud)
请注意,除了 with 之外zsh,如果这些模式中的任何一个不匹配,这些模式将按原样传递给ls,因此如果有这样命名的文件,您最终可能会列出不需要的文件。使用bash,您可以设置failglob选项来解决这个问题。
zsh 是唯一具有匹配数字范围的 glob 运算符的 shell。
ls -d -- *<10-12>
Run Code Online (Sandbox Code Playgroud)
将匹配以 10 到 12 之间的数字结尾的文件。它也会匹配,foo110因为foo1后跟10. 你可以做(用extendedglob):
ls -d -- (^*[0-9])<10-12>
Run Code Online (Sandbox Code Playgroud)
尽管。
zsh也是引入{10..12}大括号扩展类型的外壳(几年后由 ksh93 和 bash 复制)。
但是,就像{10,11,12}等价物一样,这不是通配符。这是一种在通配之前完成的扩展形式。
ls -d -- *{10..12}
Run Code Online (Sandbox Code Playgroud)
首先扩展为:
ls -d -- *10 *11 *12
Run Code Online (Sandbox Code Playgroud)
如果这 3 个 glob 中的任何一个失败,则该命令将在zsh(和bash -O failglob)中中止。
¹ 但请注意,在多个 shell 和语言环境中,包括bash在典型的 UTF-8 语言环境中的 GNU 系统上en_US.UTF-8,[0-1]可能会匹配更多字符,而不仅仅是 0 和 1,包括诸如 ?????????? 之类的字符。 ???????????????????????????????????????
尝试这个 :
ls *{10,11,12}
Run Code Online (Sandbox Code Playgroud)
或者
ls -l *{10,11,12}
Run Code Online (Sandbox Code Playgroud)
(无法显示隐藏文件)
| 归档时间: |
|
| 查看次数: |
10454 次 |
| 最近记录: |