仅列出目录中的数字文件名

gur*_*un8 11 linux bash

我有一个带有数字文件名的文件列表(例如#.php,##.php或###.php),我想一举复制/移动.

有没有人知道一个lsgrep组合命令来实现这个目标?

我有这么多:

ls -al | grep "[0-9].php"
Run Code Online (Sandbox Code Playgroud)

Pau*_*ce. 8

在Bash中,您可以使用扩展模式匹配:

shopt -s extglob
ls -l +([0-9]).php
Run Code Online (Sandbox Code Playgroud)

会找到如下文件:

123.php
9.php
Run Code Online (Sandbox Code Playgroud)

但不是

a.php
2b.php
c3.php
Run Code Online (Sandbox Code Playgroud)


Unc*_*eiv 7

像这样修改:

ls -al | grep -E '^[0-9]+\.php$'
Run Code Online (Sandbox Code Playgroud)

-E 激活扩展的正则表达式.

+ 要求必须至少出现前一组的一次出现.

\. 逃避点,否则意味着"任何角色".

^$匹配整个文件名而不仅仅是一个部分.

单引号以防止变量扩展(因为它会抱怨$).

  • 不要在脚本中使用`ls`,它仅用于交互式使用. (2认同)
  • 编辑为第一条评论:"不要在脚本或管道中使用`ls`,它仅用于交互式使用.请参阅[ParsingLs](http://mywiki.wooledge.org/ParsingLs)." (2认同)

ppo*_*zos -1

列出文件时可以使用正则表达式:

ls [0-9]*
Run Code Online (Sandbox Code Playgroud)

对于上述问题,这是一种简单且简约的方法,但我认为更好的解决方案是

ls -al | grep -E '^[0-9]+\.php$'
Run Code Online (Sandbox Code Playgroud)

正如 UncleZeiv下面所解释的。

  • 这只是偶然发生的,不应该是公认的答案。尝试使用包含“0a.txt”等文件的目录。 (5认同)
  • 当然这取决于外壳?例如,“bash”不会将其视为正则表达式。尝试一下,您会看到它与名称以数字开头的_any_文件匹配。 (2认同)