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