用于检查目录

时间:2017-03-23 03:48:43

标签: 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 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

2 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为目录中有太多文件。

您可以轻松解决第一个问题:

ls | grep -c N08170322

或者,更确切地说:

ls | grep -c '^N08170322'

会为您提供文件列表。但是,更好的方法是:

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

将解决@ hek2mgl评论中提到的ls parsing问题。

如果你真的想一次性计算所有压缩文件的行数,你可以这样做:

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

另见:

答案 1 :(得分:-1)

使用此

find . -name "N08170322*" -exec ls {} \; |wc -l

如下面的答案中所解释的那样,由于目录中有多个文件,因此您获取参数列表的时间过长。要克服它,您可以使用findexec

来加入它

编辑:创建用例以检查命令是否与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