我需要找到一个Bash脚本,如果它们满足以下两项条件,就会删除目录中的任何文件夹:
我知道此命令用于删除目录中的所有早于n天的文件夹:
find ./ -type d -mtime +7 -exec rm -rf {}\;此命令删除所有名为kittens.xml的文件,这些文件没有字符串<claws>18</claws>
find ./* -name "kittens.xml" -type f\! -exec grep -L "<claws>18</claws>" {} \;| xargs rm -fv但是,如何删除所有已超过一周且不包含该字符串的文件夹?
当然,我以前在巴什方面的经验很少。
发布于 2013-03-15 20:28:50
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。
注意:它可能会造成损害,所以在运行之前要考虑一下。我会先像这样运行它,这样它就能显示出它会移除什么.
fgrep '<claws>18</claws>' "${dir}/kittens.xml" &>/dev/null || echo "rm -fv ${dir}"此外,如果有子目录,它可能会引起问题。
发布于 2016-07-26 08:58:14
尝试使用grep v或--invert-match标记:
find ./* -name "kittens.xml" -type f\! -exec grep -L -v "<claws>18</claws>" {} \;| xargs rm -fv通过在终端中使用以下内容,您可以找到有关grep倒置的更多信息:
grep --help | grep inverthttps://stackoverflow.com/questions/15440582
复制相似问题