列出名称中只有数字的文件
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
等在文件名包含空格(甚至是换行符)时往往会停止工作(我意识到在这种情况下不会发生;更多的是面向未来和养成良好习惯的问题)。
我有一个包含这些文件的目录:
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
等在文件名包含空格(甚至是换行符)时往往会停止工作(我意识到在这种情况下不会发生;更多的是面向未来和养成良好习惯的问题)。