如何使用 find 或 xargs 计算至少包含两行的文件?
How to count files that contain at least two lines using find or xargs?
我在一个目录下有几个.tsv
个文件,我想数一数。目录 dir
中的文件名为 file1.tsv
、file2.tsv
、file3tsv
、...fileN.tsv
。这是我到目前为止所做的并且工作正常:
find dir/file* -maxdepth 1 -type f | wc -l
但是我想申请另外一个条件;我只想计算至少包含 2 行的文件。考虑到将来 dir
中可能有数十万个文件,我如何使用 find
或 xargs
命令有效地执行此操作?
那个效率不高,因为如果你有那么多文件,用那个 glob 调用 find
会导致 Argument list too long 错误。你应该做的是:
find dir -name '*.tsv' -exec awk 'FNR == 2 { printf "."; nextfile }' {} + | wc -c
在-exec[=22=之前放置额外的过滤器,例如-maxdepth、-type等]. nextfile 语句被认为是 GNU 扩展,但现在所有主流 AWK 都有它。
我在一个目录下有几个.tsv
个文件,我想数一数。目录 dir
中的文件名为 file1.tsv
、file2.tsv
、file3tsv
、...fileN.tsv
。这是我到目前为止所做的并且工作正常:
find dir/file* -maxdepth 1 -type f | wc -l
但是我想申请另外一个条件;我只想计算至少包含 2 行的文件。考虑到将来 dir
中可能有数十万个文件,我如何使用 find
或 xargs
命令有效地执行此操作?
那个效率不高,因为如果你有那么多文件,用那个 glob 调用 find
会导致 Argument list too long 错误。你应该做的是:
find dir -name '*.tsv' -exec awk 'FNR == 2 { printf "."; nextfile }' {} + | wc -c
在-exec[=22=之前放置额外的过滤器,例如-maxdepth、-type等]. nextfile 语句被认为是 GNU 扩展,但现在所有主流 AWK 都有它。