Linux 命令检查目录中的大量.gz文件

Linux 命令检查目录中的大量.gz文件,linux,bash,unix,Linux,Bash,Unix,下面是当前日期文件。以前的文件由系统转换为.gz。我想找到最近几天特定的.gz文件的总数。我尝试了下面的命令,它给出了错误。请建议 bash-3.2$ ls -lrth|tail 299K Mar 23 2017 N08170323091903766 333K Mar 23 2017 N08170323091903771 328K Mar 23 2017 N09170323091903776 367K Mar 23 2017 N09170323091903782 347K Mar 2

下面是当前日期文件。以前的文件由系统转换为.gz。我想找到最近几天特定的.gz文件的总数。我尝试了下面的命令,它给出了错误。请建议

bash-3.2$ ls -lrth|tail 

299K Mar 23  2017 N08170323091903766
333K Mar 23  2017 N08170323091903771
328K Mar 23  2017 N09170323091903776
367K Mar 23  2017 N09170323091903782
347K Mar 23  2017 N04170323092003784
368K Mar 23  2017 N08170323092003783

***bash-3.2$ ls -lrth N08170322*|wc -l***

bash: /usr/bin/ls: Arg list too long

          0

***bash-3.2$ zcat N08170322*.gz|wc -l***

bash: /usr/bin/zcat: Arg list too long

           0

发生这种情况是因为目录中的文件太多

您可以轻松绕过第一个问题:

ls | grep -c N08170322
或者,更准确地说:

ls | grep -c '^N08170322'
我会给你文件清单。但是,更好的方法是:

find . -name "N08170322*" -exec ls {} + | wc -l
这将解决@hek2mgl评论中提到的问题

如果您确实想一次计算所有压缩文件的行数,可以执行以下操作:

find . -name "N08170322*" -exec zcat {} + | wc -l

另见:

    • 使用此

      find . -name "N08170322*" -exec ls {} \; |wc -l
      
      正如下面的回答中所解释的,由于目录中有多个文件,所以参数列表太长。要克服它,您可以使用
      find
      exec

      编辑:创建用例以检查命令是否与ls一起工作

      这是我创建的3个空文件

      $ find -name "file*" -exec ls {} \;
      ./file1
      ./file2
      ./file3
      
      运行
      wc-l
      而不运行
      ls
      ,将打印每个文件中的行数

      $ find -name "file*" -exec wc -l {} \;
      0 ./file1
      0 ./file2
      0 ./file3
      
      ls
      运行它会给我提供文件数
      count
      ,这是OP想要的

      $ find -name "file*" -exec ls {} \; | wc -l
      3
      

      堆栈溢出没有绝对的“上”和“下”;答案根据用户的偏好和每篇文章中的元信息以不同的顺序显示。同意………我看不出
      ls
      在这里有什么用处。@hek2mgl:如果我直接使用
      find,没有
      ls
      -名称“VAL2*”-exec wc-l{}\,它将给出每个文件中的行数计数。这不是OP想要的。他想知道某一天的文件数量。您是否可以建议任何其他方法在不使用
      ls
      的情况下实现相同的结果?
      find
      将默认打印文件名这里的两个答案可能被视为不好的做法。正确的方法是
      find-名称“*N08170322*”-printf.|wc-c
      请阅读。此外,在第二个示例中,我看不到while循环的用处。它应该是
      find-exec zcat{}+|wc-l
      多亏了这一点,我意识到解析
      ls
      输出的陷阱。这是一个简单的计数案例,因此使用了
      ls
      。看起来您没有意识到这些陷阱。当文件名中有新行时,计数将是错误的。如果您认为在交互式操作中这样做是安全的,那么就这样做(我不会!)。但是它不应该被用在回答这样的问题上。