【问题标题】:Finding names of files or directories with certain name [closed]查找具有特定名称的文件或目录的名称[关闭]
【发布时间】:2020-10-16 21:03:54
【问题描述】:

我必须在当前目录中找到至少有 2 位数字并以非数字值结尾的文件的名称。 到目前为止,我已经完成了:

find . -maxdepth 1 -type f -name "[0-9]\{2,\}$[!0-9]"

但它不起作用。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 虽然在这种情况下它为什么不工作是相当明显的,但请避免“它不工作”,而是准确解释它是如何失败的。

标签: linux shell find glob


【解决方案1】:

\{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 文件。而$ 将完全不合适。

【讨论】:

  • 但这不是将其限制为仅介于两者之间的数字吗?如果我的文件以数字开头怎么办?例如,如果我有一个文件名 2file44a,那么您提供的 glob 表达式会起作用吗?
  • @kittycuddles 您是否尝试过创建这样的文件并对其进行测试?是的,它会起作用,因为* 匹配任何字符串,包括空字符串。见man glob