我正在尝试这个简单的任务,检查文件是否在最后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
错误。我究竟做错了什么?
答案 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
在测试之间有一个小窗口,在此期间可以在检测到文件存在后删除该文件。这不太可能是一个真正的问题,但要注意理论上它可能会发生(如果你经常运行脚本 - 文件永远丢失 - 那么它最终会发生)。