在bash文件中使用find命令

在bash文件中使用find命令

我在我的 Linux 机器上使用这个脚本来查找昨天修改的所有文件:

#!/bin/bash
find /home/*/domains/*/public_html/  -name "*.php" -mtime -1 | while read line; do
echo "$line"
done

当我手动运行该脚本时,该脚本按预期工作,但如果我从以下位置运行它,则会失败并出现以下错误cron

find: `/home/*/domains/*/public_html/': No such file or directory

发行版:Centos 5

计划任务:

#DO NOT EDIT THIS FILE. Change through DirectAdmin
[email protected]
*/1 * * * * bash /home/admin/check_phpfile_changed.sh

单引号不起作用

答案1

cron 实用程序在与 shell 环境不同的环境中运行命令,甚至可能使用与默认 shell 不同的 shell。要查看您的 cron 环境,您可以使用该env命令,例如添加以下 crontab:

* * * * * env > ~/cronenv

一分钟后,检查~/cronenv文件以查看 cron 环境(取自如何模拟cron执行脚本的环境?)。您可以将其与您的 shell 环境进行比较,以帮助调试与 cron 相关的错误。您还可以使用 cron 环境自行运行脚本:

env - `cat ~/cronenv` /bin/sh

您还可以尝试修改脚本以进行调试:

#!/bin/bash
ls -ld /home/*
ls -ld /home/*/domains/*
find /home/*/domains/*/public_html/  -name "*.php" -mtime -1 | while read line; do
    echo "$line"
done

将其作为 cronjob 运行,并查看使用不同的命令(例如命令ls)是否会出现相同的错误。

相关内容