【问题标题】:Finding files of fixed length查找固定长度的文件
【发布时间】:2016-01-13 20:48:37
【问题描述】:

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

我做错了什么?

【问题讨论】:

    标签: linux grep find


    【解决方案1】:

    没有任何正则表达式,只是通配符:

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

    参考资料:

    【讨论】:

      【解决方案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 的输入command,您需要使用管道符号find ... | grep

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2011-12-07
        • 2012-09-22
        • 1970-01-01
        • 2010-11-29
        相关资源
        最近更新 更多