首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash函数find和rm

Bash函数find和rm
EN

Stack Overflow用户
提问于 2014-02-21 01:01:26
回答 2查看 114关注 0票数 0

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

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

所以我希望删除少于10个项目的文件。我使用的是递归函数,但是我不知道如何以递归的方式添加rm。到目前为止,我所拥有的是:

代码语言:javascript
运行
复制
find . -name "*.[txt]" -exec grep ">" -c {} \;
EN

回答 2

Stack Overflow用户

发布于 2014-02-21 01:08:21

您可以像这样使用-exec

代码语言:javascript
运行
复制
find . -name "*.txt" -exec bash -c '(( $(grep ">" -c "$1") <= 10 )) && rm "$1"' - '{}' \;

为了避免为每个文件创建shell,您可以使用:

代码语言:javascript
运行
复制
while read -r f; do
    (( $(grep ">" -c "$f") <= 10 )) && rm "$f"
done < <(find . -name "*.txt")
票数 1
EN

Stack Overflow用户

发布于 2014-02-21 02:06:55

我会把它分解成更小的步骤:

代码语言:javascript
运行
复制
find . -type f -exec grep -c '>' {} + | 
awk -F: '$2 != 10 {print $1}' | 
xargs echo rm

如果你对"echo“的工作感到满意,就移除它。

如果有任何文件名包含":“,则awk步骤是脆弱的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21914627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档