我正在尝试编写一个命令来清除旧的caching资源文件。 这些文件总是.css , .javascript , .css.gzip或.javascript.gzip ,我想删除所有2天以前的文件。
我开始使用这个命令来testing,然后传递给exec rm :
find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css'
这将返回所有我想删除的文件,所以我已经添加rm使命令:
find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' -exec rm {} \;
没有什么实际上被删除,但我尝试了rm命令rm -i ,并没有任何提示,就好像没有实际上传递给rm一样。
有任何想法吗?
FWIW这是一个CentOS 5盒子
问题在于,在所有这些-o标志的末尾添加-exec ...将跳过AND与OR的优先级,例如,它find所有* .css.gzip或* .javascript.gzip或* .javascript或(* .css并删除它),所以它只能删除* .css,但find所有其他文件,但是什么都不做。 顺便说一句,这也意味着你的types和时间标志只适用于* .javascript.gzip。
使用
find /home/*/tmp/cache/* -mtime +2 -type f \( -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' \) -exec rm {} \;
为了强制它findmtime +2的所有文件,然后inputf AND(所有不同的文件名选项)并删除它们。
为了看到这一点,在你的版本和我的版本中用()replace-exec …和-print。
尝试改变RM来回显,看看它在做什么。 如果没有返回,请删除回声,你可能会记得稍微改变命令之前添加RM :)。
把你的第一个命令,pipe道xargs rm。 我通常喜欢用空格来说明文件名,所以试试这个:
find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' -print0 | xargs -0 rm
用xargs代替:
find /home/*/tmp/cache/* -mtime +2 -type f -name '*.css.gzip' -o -name '*.javascript.gzip' -o -name '*.javascript' -o -name '*.css' -print0 | xargs -0p rm
xargs的-p参数会提示你在每批文件被删除。 如果这个工作正常,你可以删除-p来删除整个删除。
-print0 / -0组合使用空格而不是空格分隔符来确保正确处理奇数文件名(例如带空格的文件名)。