在 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