列出所有以 10 或 11 或 12 结尾的文件

Arp*_*pit 7 wildcards

要列出以 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,12字符结尾的(非隐藏)文件名。

现在要注意它也匹配foo110foo112345612

如果你不想那样,那么你需要这样的东西:

ls -d -- *[!0-9]1[0-2] 1[0-2]
Run Code Online (Sandbox Code Playgroud)

然而,这不匹配 foo010

如果出于foo10, foo00010foo110您想要foo10foo00010匹配,则使用kshorbash -O extglobzsh -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,包括诸如 ?????????? 之类的字符。 ???????????????????????????????????????


NIZ*_*NIZ 8

尝试这个 :

ls *{10,11,12}
Run Code Online (Sandbox Code Playgroud)

或者

ls -l *{10,11,12}
Run Code Online (Sandbox Code Playgroud)

(无法显示隐藏文件)

  • 如果您还想查看点文件,可以使用 `shopt -s dotglob`(在 bash 中)。 (3认同)

jcb*_*rmu 5

这应该有效:

ls -d -- *1[0-2]
Run Code Online (Sandbox Code Playgroud)

请记住,它[]代表一组字符,如果是数字,它可以从 [0-9]