首页 > 解决方案 > crontab 删除路径包含 % 的文件

问题描述

想删除indexInitializer.log文件。所以用这个定义crontab:0 3 * * * rm -rf /alidata1/setupTms3/jboss-eap-6.4/%LOG_DIRECTORY%/tire2e/indexInitializer.log.*

但是,/alidata1/setupTms3/jboss-eap-6.4/在实际操作过程中,文件夹中的所有文件都被删除了。

检查cron日志发现:Jul 21 17:00:01 tmsprod4 CROND[26461]: (root) CMD (rm -rf /alidata1/setupTms3/jboss-eap-6.4/),为什么%LOG_DIRECTORY%/tire2e/indexInitializer.log.*在执行过程中缺少后缀()。直接运行是没有问题的。

标签: linuxshellcron

解决方案


你需要反斜杠%字符,所以:

0 3 * * * /bin/rm -rf /alidata1/setupTms3/jboss-eap-6.4/\%LOG_DIRECTORY\%/tire2e/indexInitializer.log

来自man 5 crontab

“第六”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或 % 字符,将由 /bin/sh 或 crontab 文件的 SHELL 变量中指定的 shell 执行。命令中的百分号 (%),除非用反斜杠 () 转义,否则将更改为换行符,第一个 % 之后的所有数据将作为标准输入发送到命令。无法将单个命令行拆分为多行,例如 shell 的尾随“”。


推荐阅读