我有一个文件目录,我想找到一个文件列表谁有超过2行。我知道我可以使用wc -l来测试每个文件,但是我如何在bash中 Package 它呢?不好意思问了个新手的问题,bash的新手。
sycxhyv71#
您可以使用以下find命令:
find
find . -type f -exec bash -c '[[ $(wc -l < "$1") -gt 2 ]] && echo "$1"' _ '{}' \;
izkcnapc2#
使用xargs和awk:
xargs
awk
$ find . -type f | xargs wc -l | awk '$1 > 2'
如果你在一个git仓库中,并且只想计算被跟踪的文件,你可以使用以下命令:
$ git ls-files | xargs wc -l | awk '$1 > 2'
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进行解析,但仍然可以使用它。你只需要事先检查你的文件名不包含换行符(或其他奇怪的)符号。
wc -l
wc -l $i
mqxuamgl4#
你可以使用下面的命令。它工作正常:
**find . -type f -exec sh -c 'for file do if [ $(wc -l < "$file") -gt 3 ]; then echo "$file"; fi; done' sh {} +**
4条答案
按热度按时间sycxhyv71#
您可以使用以下
find
命令:izkcnapc2#
使用
xargs
和awk
:如果你在一个git仓库中,并且只想计算被跟踪的文件,你可以使用以下命令:
bvk5enib3#
切换到文件所在的目录,并使用以下命令:
这个作品,当然也作为单行语句;)
这一行遍历每个文件并使用grep获取纯行数。wc -l也获取计数,但结果包括文件名…我不知道,如果你也能用这个值来比较...但没关系如果行数大于2(-gt 2),则
wc -l
$i将输出行数和文件名。如果您只想查看文件名,则将wc -l $i
替换为$i。当然,我没有检查,如果每个条目都是一个文件。您可以在检查行计数之前执行此操作。
更新:虽然不推荐使用ls进行解析,但仍然可以使用它。你只需要事先检查你的文件名不包含换行符(或其他奇怪的)符号。
mqxuamgl4#
你可以使用下面的命令。它工作正常: