目录中存在一堆文件。有些文件有 1 行,有些文件有更多行。
我正在尝试显示特定目录中的文件名(带有完整路径),其中文件中的行数> 2。
我到目前为止,是为了显示目录中的文件。查找 /abc/def -max深度 1 -类型 f
答案1
使用 GNUawk
或mawk
和其他一些人,列出当前目录中至少包含 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 的命令。
然后打印输出