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



我有一个存放这些文件的目录:

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

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等往往停止工作,当文件名包含空格(甚至换行符)(我意识到在这种情况下不会发生;这更像是为未来做准备和养成好习惯的问题。

使用扩展的glob:

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

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

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

printf '%sn' +([0-9]).html

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

要遍历这些文件,就像这样简单:

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

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

相关内容

  • 没有找到相关文章

最新更新