【问题标题】:use find to match filenames starting with number使用 find 匹配以数字开头的文件名
【发布时间】:2016-01-27 17:13:52
【问题描述】:

我正在尝试查找文件名中只有数字的文件。例如,如果我有文件 123.txt、45.doc、alpha_123、beta_123.txt、45 和 123,我只想匹配文件 45 和 123。我尝试了 findgrep 的各种选项或它们的组合,但没有按我的意愿工作或给我语法错误。

还有没有机会我只能匹配空文件?我尝试使用“空”选项,但也没有成功,尽管这可能是由于使用了错误的语法。

这个find . -name "[0-9]*" 有点有效,因为它找到了文件名中带有数字的文件,例如文件 123 和文件 45,但它也找到了带有扩展名的文件,例如 123。 txt 和 45.doc,不幸的是这不是我想要的。

根据以下建议(因为我的原始问题在发布答案后经过大量编辑),完全符合我的要求的是$ find . -type f -name '[[:digit:]]*' | grep -E '.*/[0-9]+$'

对于最初的误导/模棱两可的帖子,我深表歉意,我希望编辑后的版本对其他同样对如何将find 与正则表达式一起使用感到困惑的用户有所帮助。

【问题讨论】:

  • 试试find . -regex '.*/[0-9]+'
  • find . -name '[[:digit:]]*'怎么样
  • @glenn jackman:不幸的是,这会找到所有文件名中包含数字的文件 - 我正在尝试查找文件名中只有数字的文件。
  • @kouki,不是真的。 -name '*[[:digit:]]*' 会找到包含数字的文件。 -name '[[:digit:]]*' 查找以数字开头的文件。 -name 的参数是 glob 模式,而不是正则表达式。

标签: regex linux find digits


【解决方案1】:

要么:

$ find -E .  -type f -regex '.*/[[:digit:]]+$'

或者这个:

$ find .  -type f -name '[[:digit:]]*' | grep -E '.*/[0-9]+$'

努力查找名称完全由数字组成的文件(即没有扩展名)

【讨论】:

  • 谢谢你 dawg :) 第一个给了我一个find: unknown predicate -E' 错误。然而,第二个完全按预期工作。再次感谢:)
  • -E 用于 BSD 上的扩展正则表达式 find 它可能是 GNU 版本的 find 上的不同开关。
猜你喜欢
  • 2014-01-15
  • 2015-06-14
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多