计算与模式匹配的文件的行数

计算与模式匹配的文件的行数

我想列出与特定模式匹配的文件及其行数。到目前为止,我已经尝试了以下操作,其中列出了与所需模式匹配的文件:

find 2021.12.*/ -maxdepth 2 -name "myfilepattern.csv" -ls

123456789  32116 -rw-rw-r--   1 user1 user1 32881884 Dec  1 23:59 2021.12.01/myfilepattern.csv
234567891      4 -rw-rw-r--   1 user1 user1      144 Dec  2 00:00 2021.12.02/myfilepattern.csv

我想在此结果中添加一列,其中包含每个文件的行数2021.12.01/myfilepattern.csv2021.12.02/myfilepattern.csv.

我对这个专栏的位置没有什么具体要求。可以在开头或结尾。

答案1

您可以使用-printf-exec操作以及来wc -l计算行/行数:

find 2021.12.*/ -maxdepth 2 -name "myfilepattern.csv" -printf '%i\t%k\t%M\t%n\t%u\t%g\t%s\t%Tb %Td %TH:%TM\t' -exec wc -l {} \;

行数将是倒数第二列。

答案2

可能一种简单的方法是仅调用wc -l每个文件,然后将该输出与谓词的输出组合起来-ls。以下使用 执行此操作paste,并且由于我wc在使用之前调用-ls,因此wc输出将位于第一列中:

find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
    -exec wc -l {} \; \
    -ls |
paste - -

为了避免在 的输出中获取文件的路径名wc,您必须将文件重定向到wc而不是在实用程序的命令行上传递它。要使用-execin执行此操作find,我们需要调用 shell:

find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
    -exec sh -c 'wc -l <"$1"' sh {} \; \
    -ls |
paste - -

如果您想获取输出末尾的行数,请交换-exec和周围的内容。-ls-ls

相关内容