#! /bin/sh
while [ ! -r '*.pdf' ]
do
echo "No pdf files have been created in the last 5 mins."
sleep 5
done
while [ -r '*.pdf' ]
do
echo "The following pdf file(s) have been created in the last 5 mins:"
find -mmin -5 -iname '*.pdf'
sleep 5
done
任何想法为什么即使在最后5分钟内制作了一些.pdf,它也不会进入第二个循环? 可能非常错误的代码,非常感谢任何想法!
答案 0 :(得分:3)
对于第一个循环,您有:
while [ ! -r '*.pdf' ]
测试条件是查找名为*.pdf
的文件(没有通配符;精确命名为*.pdf
的文件),因为您将名称包装在引号中。
对于第二个循环,您有:
while [ -r '*.pdf' ]
这也是寻找*.pdf
(不是名称的全局)。因此,除非在不太可能的情况下存在名为*.pdf
的文件,否则这些循环将无法按预期工作。
您可以使用:
while x=( $(find -mmin -5 -iname '*.pdf') )
do
if [ -z "${x[*]}" ]
then echo "No pdf files have been created in the last 5 mins."
else
echo "The following pdf file(s) have been created in the last 5 mins:"
print "%s\n" "${x[@]}"
fi
sleep 5
done
这使用数组赋值为您提供名称列表。它并不完美;如果文件名中有空格,你最终会破坏名字。修复并非完全无关紧要。但是,仔细选择"${x[*]}"
从阵列中的名称制作单个字符串(如果有的话),我们可以测试新文件。找到新文件后,使用printf
和"${x[@]}"
在单独的行中报告其名称,每行输出一个名称。