Bash函数find和rm

时间:2014-02-20 17:01:26

标签: bash recursion

我正在尝试执行递归grep并删除少于指定条目的文件。

为了更清楚,我有一个400000个文本文件的目录,在每个文件中我有10个项目,每个项目都以>开头。现在问题是4000000文件中的一些文件只有6-7或8-9项以>开头。

所以我希望删除少于10个项目的文件。我正在使用递归函数,但是我无法弄清楚如何以递归方式添加rm。我到现在所拥有的是:

find . -name "*.[txt]" -exec grep ">" -c {} \;

2 个答案:

答案 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步骤很脆弱