linux - bash 脚本从 shell 但不是从 cron 作业运行

标签 linux bash cron

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/

相关文章:

c - 使用 ioctl TIOCOUTQ 进行套接字编程

linux - 如何打印文件在另一个目录的所有目录中重复的次数#bash

php - 将 cron 配置为每 15 分钟运行一次 URL

javascript - 通过计划的 CRON 运行 Angular 4 脚本

linux - 查找匹配位于不同行的模式的文件

如果没有文件,linux shell脚本从stdin读取

linux - 从键盘文件描述符中读取

linux - 获取执行 bash 脚本的负载、cpu 使用率和时间

c - 当我在终端中按 Ctrl+C 时,执行 C 中的最后一个函数

arrays - 在 bash 中搜索数组返回索引