我想列出与特定模式匹配的文件及其行数。到目前为止,我已经尝试了以下操作,其中列出了与所需模式匹配的文件:
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.csv
和2021.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
而不是在实用程序的命令行上传递它。要使用-exec
in执行此操作find
,我们需要调用 shell:
find 2021.12.*/ -maxdepth 2 -name 'myfilepattern.csv' \
-exec sh -c 'wc -l <"$1"' sh {} \; \
-ls |
paste - -
如果您想获取输出末尾的行数,请交换-exec
和周围的内容。-ls
-ls