在bash文件中使用find命令


3

我在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

cron:

#DO NOT EDIT THIS FILE. Change through DirectAdmin
MAILTO=MYMAIL@gmail.com
*/1 * * * * bash /home/admin/check_phpfile_changed.sh

单引号不起作用


1
输出是ls -ld /home/*/domains/*/public_html/什么?
Hauke Laging '16

2
嗨,欢迎来到stackexchange。您可以发布您在crontab中编写的内容,以使这个问题更好。
Joao Costa

这不会引起问题,但是while循环的意义何在?find默认情况下已经打印了其输出,while它没有做任何有用的操作,如果文件名包含换行符,则可能会导致问题。只需将其删除。
terdon

2
另外,请编辑您的问题并告诉我们i)您使用的发行版是什么;ii)cron执行什么;iii)向我们显示相关的crontab行;您可能要用/home/*/domains/*/public_html/单引号引起来吗?
terdon

3
由于需要更多信息(有关所指示目录的存在),我投票关闭了此问题,因为用户无法提供此信息。
库萨兰达

Answers:


0

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命令)遇到相同的错误。


环境的差异并不能解释为什么球体不会膨胀。
库萨兰达
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.