我正在尝试执行递归grep并删除少于指定条目的文件。
更清楚地说,我有一个包含400000个文本文件的目录,每个文件中有10个项目,每个项目都以>
开头。现在的问题是,4000000个文件中的一些文件只有6-7或8-9个项目,以>
开头。
所以我希望删除少于10个项目的文件。我使用的是递归函数,但是我不知道如何以递归的方式添加rm
。到目前为止,我所拥有的是:
find . -name "*.[txt]" -exec grep ">" -c {} \;
发布于 2014-02-21 01:08:21
您可以像这样使用-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")
发布于 2014-02-21 02:06:55
我会把它分解成更小的步骤:
find . -type f -exec grep -c '>' {} + |
awk -F: '$2 != 10 {print $1}' |
xargs echo rm
如果你对"echo“的工作感到满意,就移除它。
如果有任何文件名包含":“,则awk步骤是脆弱的。
https://stackoverflow.com/questions/21914627
复制相似问题