在shell中的if语句中查找

时间:2017-01-19 20:20:36

标签: shell if-statement find

我正在尝试这个简单的任务,检查文件是否在最后15分钟内创建或更新,如果文件不存在则创建一个文件。但是如果文件不存在,我会发现错误。 你能告诉我我做错了吗?

if [ -n "$(find test.txt -mmin +15)" ]
then
echo "old file found. needs touch up"
touch test.txt
else
echo "File modified in the last 15 mins jeez"
fi

但这似乎不起作用。我收到find: test.txt': No such file or directory错误。我究竟做错了什么?

2 个答案:

答案 0 :(得分:1)

find解释其常规"参数(不以-开头的那些)作为查看的路径。它们可以是dircectories或单个文件,但它们确实需要存在。您可能希望在当前目录中查找名为 test.txt的文件

if [ -n "$(find . -name test.txt -min +15)" ]

(根据您对find的实施情况,您可以省略.参数。)

要确保文件已经存在,如果它已经存在,只需添加一个存在检查:

if ! [ -e test.txt ] || [ -n "$(find . -name test.txt -min +15)" ]; then

答案 1 :(得分:0)

也许你应该这样做:

name="test.txt"
if [ ! -f "$name" ] && [ -n "$(find "$name" -mmin +15)" ]
then
    echo "Old file $name found. Needs touch up"
    touch "$name"
else
    echo "File $name modified in the last 15 mins jeez"
fi

或者也许:

name="test.txt"
if [ ! -f "$name" ]
then
    echo "File $name does not exist"
elif [ -n "$(find "$name" -mmin +15)" ]
then
    echo "Old file $name found. Needs touch up"
    touch "$name"
else
    echo "File $name modified in the last 15 mins jeez"
fi

在测试之间有一个小窗口,在此期间可以在检测到文件存在后删除该文件。这不太可能是一个真正的问题,但要注意理论上它可能会发生(如果你经常运行脚本 - 文件永远丢失 - 那么它最终会发生)。