如何非递归地匹配包含 N 次出现的字符子集的目录名称(使用find
)?
在我的具体情况下,我只想要 6 位数字的目录名称。这是有效但非特定的(它会给我所有带有数字的目录名称):
find . -maxdepth 1 -type d -regex './[0-9]+'
ls -d +([0-9])
这也有效,但给了我以数字开头并后跟任何内容的目录名称:
find . -maxdepth 1 -type d -name '[0-9]*'
从我读到的内容来看,我不知道如何匹配ls
N 次,因为它使用 glob 而不是正则表达式(而且我对 glob 一无所知)。我不明白的是,这些都不能使用find
:
find . -maxdepth 1 -type d -regex './[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]{6}'
find . -maxdepth 1 -type d -name '[0-9]+'
我已经使用过正则表达式很多次了,但我不明白我的模式出了什么问题(我也很惊讶我必须用 来指定./
)-regex
?
答案1
regex
GNU 的默认类型find
是emacs
,它不支持间隔。您可以指定不同的正则表达式类型,例如posix-egrep
,这将解决您的问题:
find . -maxdepth 1 -type d -regextype posix-egrep -regex './[0-9]{6}'