删除旧缓存文件 - 命令帮助

删除旧缓存文件 - 命令帮助

我正在尝试编写一个命令来帮助清除旧的缓存资产文件。文件总是.css.javascript.css.gzip.javascript.gzip我想删除所有超过 2 天的文件。

在传递给之前,我首先使用此命令进行测试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 {} \;

但实际上并没有删除任何内容,我尝试发出命令rmrm -i但没有任何提示,好像实际上没有任何东西被传递给 rm。

有任何想法吗?

FWIW 这是在 CentOS 5 盒子上

答案1

问题是,-exec ...在所有这些标志的末尾添加-o会破坏 AND 与 OR 的优先级,例如,它会查找所有 *.css.gzip OR *.javascript.gzip OR *.javascript OR (*.css AND 删除它),因此它只会删除 *.css,但会找到所有其他文件,但不会对它们执行任何操作。顺便说一句,这也意味着您的 type 和 mtime 标志仅适用于 *.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 {} \;

为了强制它找到所有带有 mtime +2 的文件并输入 f 并(所有不同的文件名选项)并删除它们。

要查看其实际效果,请在您的版本和我的版本中将 -exec ... 替换为 -print ()。

答案2

尝试将 rm 改为 echo 并查看其作用。如果没有返回任何内容,请删除 echo,您可能会记得在添加 rm 之前稍微更改命令 :)。

答案3

执行第一个命令,管道到 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

答案4

尝试使用 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使用空值而不是空格作为分隔符,以确保正确处理奇数文件名(例如带有空格的文件名)。

相关内容