行数大于2的文件列表

行数大于2的文件列表

目录中存在一堆文件。有些文件有 1 行,有些文件有更多行。

我正在尝试显示特定目录中的文件名(带有完整路径),其中文件中的行数> 2。

我到目前为止,是为了显示目录中的文件。查找 /abc/def -max深度 1 -类型 f

答案1

使用 GNUawkmawk 和其他一些人,列出当前目录中至少包含 3 行的常规文件:

find . ! -name . -prune -type f -size +2c -exec awk '
   FNR==3{print FILENAME; nextfile}' {} +

(请注意,这也计算非终止行。如果文件包含a\nb\nc而不是a\nb\nc\n,则仍然认为该文件有 3 行,即使wc -l只会返回 2。-size +2c这只是跳过打开和读取少于 3 字节的文件的优化,因为它们不能包含 3 行)。

这是高效的,因为它运行尽可能少的命令,并且在看到第三行时立即停止处理文件,而不是完全读取文件以查找行数。

如果您的 shell 是zsh,您可以将其缩短为

awk 'FNR==3{print FILENAME; nextfile}' ./*(D.L+2)

find . ! -name . -prune是 GNU 的标准等效项find . -mindepth 1 -maxdepth 1(修剪除 ) 之外的每个目录.

(请注意,awk上面的代码也适用于awk不支持的实现nextfile,只是它将完全读取那里的文件,该nextfile语句将仅被视为变量引用)。

答案2

grep -Hsc . -- * | sed -n '/:[0-2]$/!s/:.*$//p'

但不要考虑空行。如果您想将其计算在内:

grep -Hsc '$' -- * | sed '/:[0-2]$/d;s/:.*$//'

答案3

尝试这个命令:

find . -maxdepth 1 -type f \
    -exec sh -c 'test $( wc -l {} | cut -f1 -d" " ) -gt "2"' \; -print

你必须小心,如果$(rm -rf ~)在你的目录中发现了一些被调用的外来文件,这可能会导致命令删除该目录中的所有数据

find . -maxdepth 1 -type f在当前目录中搜索深度为 1 的文件,这意味着不要进入子目录

-exec sh -c 执行一个命令,我在这里为一个命令运行一个脚本

'test $( wc -l {} | cut -f1 -d" " ) -gt "2"'这是计算每个文件的行数大于 2 的命令。

然后打印输出

相关内容