我必须做一个 cronjob 来删除特定目录中超过 99 天的文件,但我不确定文件名是由值得信赖的 Linux 用户创建的。我必须期待特殊字符、空格、斜杠字符和其他字符。
以下是我认为可行的方法:
find /path/to/files -mtime +99 -exec rm {}\;
但我怀疑如果有特殊字符或者它找到一个只读文件,这将失败(cron 可能无法以超级用户权限运行)。如果它符合此类文件,我需要它继续。
使用 时,空格、制表符、回车或特殊字符-exec rm {} \;
应该不会有任何问题,因为直接调用该命令并一次将每个文件的名称传递给它。find
rm
该命令不会删除目录,因为您没有将-r
参数传递给它,而且您可能也不想要。这最终可能有点危险。-f
如果您没有写权限,您可能还希望包含参数以执行强制。以root身份运行cron脚本,你应该没问题。
我唯一担心的是,您最终可能会遇到不想删除但在过去 100 天内未修改的文件。例如,在您的工作中停止自动销毁序列的密码。很有可能该文件在过去 100 天内没有被修改过,但是一旦自动销毁序列开始,您就不希望因为密码丢失而受到责备。
好的,更合理的可能是使用但很少修改的应用程序。也许某人的简历没有更新,因为他们正在从事当前的工作等。
所以,小心你的假设。仅仅因为一个文件在 100 天内没有被修改并不意味着它没有被使用。更好的标准(尽管仍有疑问)是文件是否在过去 100 天内被访问过。也许这是最后的命令:
find /path/to/files -atime +99 -type f -exec rm -f {}\;
一些find
命令有一个-delete
参数可以用来代替-exec rm
参数:
find /path/to/files -atime +99 -delete
这将删除找到的目录和文件。
还有一个小建议:第一周,保存在日志文件中找到的文件而不是删除它们,然后检查日志文件。这样,您可以确保您没有删除重要的内容。一旦您对日志文件中没有您不想触摸的内容感到满意,您就可以删除这些文件。一周后,如果您对不会删除任何重要内容感到满意,您可以恢复find
命令为您执行删除操作。
如果您rm
使用该-f
选项运行,则无论您是否具有文件的写权限,您的文件都将被删除(重要的是包含文件夹)。因此,您可以删除文件夹中的所有文件,也可以不删除。-r
如果要删除子文件夹,也可以添加。
我不得不说:要非常小心!你在玩火;)我建议你用一些危害较小的file
命令来调试。
您可以通过创建一堆文件来测试这一点,例如:
touch {a,b,c,d,e,f}
并根据需要设置每个人的权限
您应该使用-execdir
而不是-exec
. 更好的是,阅读手册中章节的完整安全注意事项。find
findutils
请始终使用rm [opts] -- [files]
,这将使您避免出现-rf
wiich 之类的文件的错误,否则这些文件将被解析为选项。当您提供文件名时,请结束所有选项。