查找固定长度的文件

时间:2016-01-13 20:48:38

标签: linux grep find

我正在尝试查找以字母' 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]

我做错了什么?

2 个答案:

答案 0 :(得分:4)

没有任何正则表达式,只是通过以下方式:

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

参考文献:

答案 1 :(得分:2)

我会使用以下使用扩展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假设你最后不小心通过了搜索路径,这是一个常见的错误。这就是消息的原因。