cronjob使用特殊字符删除超过N天的文件

时间:2014-05-04 23:40:46

标签: linux

我正在尝试创建一个删除早于X天的Linux机器上的文件的作业。非常简单:

find /path/to/files -mtime +X -exec rm {}\;

问题是我的所有文件都有特殊字符b / c它们是来自网络摄像头的图片 - 大多数都包含括号,所以上面的命令失败了"没有这样的文件或目录"。

2 个答案:

答案 0 :(得分:1)

你试过这个:

find /path/to/files -mtime +X -exec rm '{}' \;

或者也许:

rm $(find /path/to/files -mtime +X);

甚至使用xargs代替-exec的方法:

find /path/to/files -mtime +X | xargs rm -f;

xargs的另一个转折是使用-print0,这将有助于脚本区分文件名和空格中的空格。使用ASCII null字符作为文件分隔符返回列表之间的空格:

find /path/to/files -mtime +X -print0 | xargs -0 rm -f;

man find-print0下解释:

This primary always evaluates to true.  It prints the pathname of
the current file to standard output, followed by an ASCII NUL
character (character code 0).

我还建议添加-maxdepth-type标志,以便更好地控制脚本的功能。所以我会将它用于干运行测试:

find /path/to/files -maxdepth 1 -type f -mtime +1 -exec echo '{}' \;

-maxdepth标志控制find向下执行的目录数量,-type将搜索限制为文件(又名:f),因此脚本专注于仅限文件。这只是echo结果。然后,当您对此感到满意时,请将echo更改为rm

答案 1 :(得分:0)

确实

find /path/to/files -mtime +X -print | tr '()' '?' | xargs rm -f

工作?