首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash脚本:查找并删除7天以上的文件夹,并使用不包含特定字符串的文件

Bash脚本:查找并删除7天以上的文件夹,并使用不包含特定字符串的文件
EN

Stack Overflow用户
提问于 2013-03-15 19:26:02
回答 2查看 4.6K关注 0票数 0

我需要找到一个Bash脚本,如果它们满足以下两项条件,就会删除目录中的任何文件夹:

  1. 超过7天。
  2. 在它们中包含一个不包含特定字符串的xml文件。

我知道此命令用于删除目录中的所有早于n天的文件夹:

代码语言:javascript
复制
find ./ -type d -mtime +7 -exec rm -rf {}\;

此命令删除所有名为kittens.xml的文件,这些文件没有字符串<claws>18</claws>

代码语言:javascript
复制
find ./* -name "kittens.xml" -type f\! -exec grep -L "<claws>18</claws>" {} \;| xargs rm -fv

但是,如何删除所有已超过一周且不包含该字符串的文件夹?

当然,我以前在巴什方面的经验很少。

EN

回答 2

Stack Overflow用户

发布于 2013-03-15 20:28:50

代码语言:javascript
复制
for dir in `find /WHERE/ARE/THOSE/DIRS -type d -mtime +7 2>/dev/null` ; do
  fgrep '<claws>18</claws>' "${dir}/kittens.xml" &>/dev/null || rm -fv "${dir}"
done

它循环遍历已找到的目录,然后通过fgrep检查文件中所需的字符串,如果找不到它(例如不在文件中或文件丢失),则移除dir。

注意:它可能会造成损害,所以在运行之前要考虑一下。我会先像这样运行它,这样它就能显示出它会移除什么.

代码语言:javascript
复制
  fgrep '<claws>18</claws>' "${dir}/kittens.xml" &>/dev/null || echo "rm -fv ${dir}"

此外,如果有子目录,它可能会引起问题。

票数 0
EN

Stack Overflow用户

发布于 2016-07-26 08:58:14

尝试使用grep v--invert-match标记:

代码语言:javascript
复制
find ./* -name "kittens.xml" -type f\! -exec grep -L -v "<claws>18</claws>" {} \;| xargs rm -fv

通过在终端中使用以下内容,您可以找到有关grep倒置的更多信息:

代码语言:javascript
复制
grep --help | grep invert
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15440582

复制
相关文章

相似问题

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