linux Bash --查找超过3行的文件列表

iyr7buue  于 2023-06-21  发布在  Linux
关注(0)|答案(4)|浏览(150)

我有一个文件目录,我想找到一个文件列表谁有超过2行。
我知道我可以使用wc -l来测试每个文件,但是我如何在bash中 Package 它呢?
不好意思问了个新手的问题,bash的新手。

sycxhyv7

sycxhyv71#

您可以使用以下find命令:

find . -type f -exec bash -c '[[ $(wc -l < "$1") -gt 2 ]] && echo "$1"' _ '{}' \;
izkcnapc

izkcnapc2#

使用xargsawk

$ find . -type f | xargs wc -l | awk '$1 > 2'

如果你在一个git仓库中,并且只想计算被跟踪的文件,你可以使用以下命令:

$ git ls-files | xargs wc -l | awk '$1 > 2'
bvk5enib

bvk5enib3#

切换到文件所在的目录,并使用以下命令:

for i in $(ls);
do
    if [ `grep -c '' $i` -gt 2 ]; then 
        echo `wc -l $i`;
    fi;
done

这个作品,当然也作为单行语句;)
这一行遍历每个文件并使用grep获取纯行数。wc -l也获取计数,但结果包括文件名…我不知道,如果你也能用这个值来比较...但没关系如果行数大于2(-gt 2),则wc -l $i将输出行数和文件名。如果您只想查看文件名,则将wc -l $i替换为$i。
当然,我没有检查,如果每个条目都是一个文件。您可以在检查行计数之前执行此操作。
更新:虽然不推荐使用ls进行解析,但仍然可以使用它。你只需要事先检查你的文件名不包含换行符(或其他奇怪的)符号。

mqxuamgl

mqxuamgl4#

你可以使用下面的命令。它工作正常:

**find . -type f -exec sh -c 'for file do if [ $(wc -l < "$file") -gt 3 ]; then echo "$file"; fi; done' sh {} +**

相关问题