我正在尝试执行递归grep并删除少于指定条目的文件。
为了更清楚,我有一个400000个文本文件的目录,在每个文件中我有10个项目,每个项目都以>
开头。现在问题是4000000文件中的一些文件只有6-7或8-9项以>
开头。
所以我希望删除少于10个项目的文件。我正在使用递归函数,但是我无法弄清楚如何以递归方式添加rm
。我到现在所拥有的是:
find . -name "*.[txt]" -exec grep ">" -c {} \;
答案 0 :(得分:1)
您可以像这样使用-exec
:
find . -name "*.txt" -exec bash -c '(( $(grep ">" -c "$1") <= 10 )) && rm "$1"' - '{}' \;
为避免为每个文件创建shell,您可以使用:
while read -r f; do
(( $(grep ">" -c "$f") <= 10 )) && rm "$f"
done < <(find . -name "*.txt")
答案 1 :(得分:0)
我会把它分解成更小的步骤:
find . -type f -exec grep -c '>' {} + |
awk -F: '$2 != 10 {print $1}' |
xargs echo rm
如果您对它的工作满意,请删除“echo”
如果您的文件名包含“:”
,则awk步骤很脆弱