cron 安装是vixie-cron
/etc/cron.daily/rmspam.cron
#!/bin/bash
/usr/bin/rm /home/user/Maildir/.SPAM/cur/*;
我有这个简单的 bash 脚本,我想将其添加到 cron 作业(之前也包括垃圾邮件学习命令),但是这部分总是失败并显示“找不到文件或目录”据我所知,metachar 不是作为 cron 作业运行时正确解释。如果我从命令行执行脚本,它工作正常。
我想知道为什么这不起作用,当然还有一个可行的解决方案 :)
谢谢
编辑 #1 当我得到它的流行问题徽章时又回到了这个问题。我首先这样做,
#!/bin/bash
find /home/user/Maildir/.SPAM/cur/ -t file | xargs rm
最近正在阅读 xargs 手册页并将其更改为这个
#!/bin/bash
find /home/user/Maildir/.SPAM/cur/ -t file | xargs --no-run-if-empty rm
短 xargs 选项是 -r
最佳答案
如果目录中没有文件,则通配符不会展开,直接传递给命令。没有名为“*”的文件,然后命令失败并显示“找不到文件或目录”。试试这个:
if [ -f /home/user/Maildir/.SPAM/cur/* ]; then
rm /home/user/Maildir/.SPAM/cur/*
fi
或者只使用“-f”标志来 rm。此命令的另一个问题是当垃圾邮件超过命令行的最大长度时会发生什么。像这样的东西总体上可能更好:
find /home/user/Maildir/.SPAM/cur -type f -exec rm '{}' +
如果你有一个旧的发现,一次只执行一个文件:
find /home/user/Maildir/.SPAM/cur -type f | xargs rm
既可以处理太多文件,也可以不处理任何文件。感谢 Charles Duffy 指出 find 中 -exec 的 + 选项。
关于linux - bash 脚本从 shell 但不是从 cron 作业运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/157342/