如何使用 ls 命令获取具有数字名称的文件?

如何使用 ls 命令获取具有数字名称的文件?

在 Linux 命令行中,如何列出当前目录中仅数字(仅名称为 0 到 9)的文件名?

这是如何在 Linux 命令提示符中获取系统上的进程 ID 列表?,我已ls在其中运行/proc/。我现在尝试排除除进程 ID 目录之外的所有内容。

答案1

使用ls管道 grep -E(具有附加正则表达式功能的扩展 grep)搜索所有仅包含数字字符的文件名:

ls | grep -E '^[0-9]+$'

答案2

不管你的问题标题是什么,我都想用 为你提供一个解决方案find。它有一个正则表达式选项 ( -regex),因此[0-9]*将匹配仅由数字组成的文件名。

-type f要以递归方式在当前目录下查找文件( ) .,请使用

find . -type f -regex ".*/[0-9]*"

正则表达式中的.*/是必需的,因为正则表达式“是整个路径的匹配,而不是搜索。“(man find)。因此,如果您只想查找当前目录中的文件,请改用\./

find . -type f -regex "\./[0-9]*"

然而,这并不是最理想的,因为在这种情况下 find 也会递归搜索,然后只过滤掉所需的结果。

答案3

如果您想使用ls,您可以使用:

ls *[[:digit:]]*

splat*运算符将匹配任何[[:digit:]]。您还可以使用:

ls *[0-9]*

它还匹配带有数字 0-9 的文件或目录。

如果您有与 glob 模式匹配的子目录,则可以使用该-d开关使 ls 不会递归到这些子目录。

答案4

我喜欢@MOHRE 的提醒,但我必须记得设置扩展模式匹配 shopt -s extglob

内置的 shopt 可以设置例如shopt -s *someshelloption*或取消设置shopt -u *someshelloption*

这里:可以使用以下一个或多个子模式形成复合模式:

  ?(pattern-list)
         Matches zero or one occurrence of the given patterns
  *(pattern-list)
         Matches zero or more occurrences of the given patterns
  +(pattern-list)
         Matches one or more occurrences of the given patterns
  @(pattern-list)
         Matches one of the given patterns
  !(pattern-list)
         Matches anything except one of the given patterns

相关内容