列出名称中只有数字的文件

List files that only have number in names

我有一个包含这些文件的目录:

1.html 22.html 333.html zxc.html

我想获取名称中只有数字的 html 个文件的列表:

1.html 22.html 333.html

我认为这行得通

find . -regex '^[0-9]+\.html'

ls -al | grep -E '^[0-9]+\.html$'

但我一无所获。我的想法是获取名称中只有数字的 html 文件,并将它们传递给 sed 以使用 linux 和 bash

执行 substitution.I'

使用扩展的 glob:

$ shopt -s extglob
$ echo +([0-9]).html
1.html 22.html 333.html

启用 extglob 后,+(pattern) 匹配 pattern 中的一个或多个。请注意,我只是使用 echo 来显示哪些文件匹配 - 如何使用 glob 取决于你想用它做什么。

要在单独的行上打印每个文件,您可以使用:

printf '%s\n' +([0-9]).html

匹配该模式的每个文件都作为单独的参数传递给 printf,因此您不必担心文件名中的空格或其他有趣字符等问题。

遍历这些文件,很简单:

for file in +([0-9]).html; do 
    echo "$file"
done

同样,shell 会处理有趣文件名的任何潜在问题,因此您不必担心。

find-regex 匹配整个路径,而不仅仅是文件名(我自己似乎每次使用它都会忘记一次)。

因此,您可以使用:

find . -regex '.*/[0-9]+\.html'

^$ 不是必需的,因为它总是针对整个路径进行测试。)

使用 find 在您想要对文件执行某些操作时也有优势,例如使用内置 -exec-print0 和管道到 xargs -0 甚至(使用 Bash):

while IFS='' read -r -d '' file
do
  # ...
done < <(find . -regex '.*/[0-9]+\.html' -print0)

echo 与 glob、ls|grep 等在文件名包含空格(甚至是换行符)时往往会停止工作(我意识到在这种情况下不会发生;更多的是面向未来和养成良好习惯的问题)。