查找固定长度的文件

Finding files of fixed length

我正在尝试查找以字母 'a' 开头且长度为 6 的文件名。我尝试了多种变体,最新的变体是:

find /usr/bin -type f -regex "^[a]" > grep {6}

但是我收到一条错误消息:

find: paths must precede expression: {6}
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

我做错了什么?

我会使用以下使用 扩展 posix 正则表达式 :

的命令
find /usr/bin -type f -regextype posix-extended -regex '.*/a.{5}'

让我从头解释一下模式:

  • .{5}匹配五个任意字符
  • a 匹配文字 a
  • / 匹配文件名前的路径定界符
  • .* 是路径,在本例中是 /usr/bin

顺便说一句,一个甚至不需要特殊正则表达式引擎的简单命令是:

find /usr/bin -type f -regex '.*/a.....'
  • $是文件名的结尾
  • .....是五个任意字符
  • a 是文字 a
  • .*/是前面的路径

另一件事。虽然您的正则表达式错误并且根本不需要 grep,但为什么会收到此奇怪的错误消息?

您正在使用 find ... > grep,而我认为您想使用 find ... | grep。请注意 > 会将 find 命令的输出重定向到 文件 。在本例中,文件名为 grep。如果你想将 find 命令的输出重定向到 grep 命令 的输入,你需要使用管道符号 find ... | grep.

> filename 重定向可以出现在命令行的任何地方,不一定非要在末尾。这就是为什么 {6} 被解释为 find 的最后一个参数。由于这个参数不是预期的,find 假设你不小心在最后传递了一个搜索路径,这是一个常见的错误。这就是消息的原因。

没有任何正则表达式,只是 globbing:

find /usr/bin -type f -name 'a?????'

参考文献: