【发布时间】:2020-10-16 21:03:54
【问题描述】:
我必须在当前目录中找到至少有 2 位数字并以非数字值结尾的文件的名称。 到目前为止,我已经完成了:
find . -maxdepth 1 -type f -name "[0-9]\{2,\}$[!0-9]"
但它不起作用。有人可以帮我解决这个问题吗?
【问题讨论】:
-
虽然在这种情况下它为什么不工作是相当明显的,但请避免“它不工作”,而是准确解释它是如何失败的。
我必须在当前目录中找到至少有 2 位数字并以非数字值结尾的文件的名称。 到目前为止,我已经完成了:
find . -maxdepth 1 -type f -name "[0-9]\{2,\}$[!0-9]"
但它不起作用。有人可以帮我解决这个问题吗?
【问题讨论】:
\{2,\} 是一个正则表达式1,而 shell 和 find 的 -name 选项使用 shell 模式(又名 glob)。使用任何一个
ls *[0-9]*[0-9]*[!0-9]
find . -maxdepth 1 -type f -name '*[0-9]*[0-9]*[!0-9]'
* 表示任意数量的字符,[0-9] 是数字,[!0-9] 不是数字。
1还要注意,在正则表达式中,[0-9]\{2,\} 将是“至少两个连续数字”。所以它不会匹配f1f2x 文件。而$ 将完全不合适。
【讨论】:
* 匹配任何字符串,包括空字符串。见man glob。