【发布时间】:2021-07-28 06:02:14
【问题描述】:
下面是我的 ksh 脚本。对于第一个 if 测试条件,我收到 paths must precede expression 错误。为了检查 if..find 的语法是否正确,我添加了第二部分并正确收到消息 pass 2 - found files。
我还验证了以下 find 命令成功运行并返回了我想要的正确文件。我尝试在 PAY*.txt 周围加上双引号,并在星号 'PAY*.txt' 之前加上反斜杠,但没有运气。
find -iname 'PAY*.txt' -newermt '2021/04/22 00:00' ! -newermt '2021/04/22 23:59' -print
我猜这个问题可能是 p_date1 和 p_date2 被传递了,但我又不知道足够多,无法解决它。任何帮助将不胜感激。
#!/bin/ksh
p_date1='2021/04/22 00:00'
p_date2='2021/04/22 23:59'
if test -n "$(find -iname 'PAY*.txt' -newermt $p_date1 ! -newermt $p_date2 -print)";
then
echo 'Files exist to upload'
else
echo 'No Payment files exist to upload'
fi
if test -n "$(find -iname 'PAY*.txt' -ls)";
then
echo 'pass 2 - found files'
else
echo 'pass 2 - no files'
fi
谢谢。
【问题讨论】:
-
只需在
-iname之前添加一个点('从这个目录开始')作为参数。 -
我无法解释为什么您会看到
pass 2 - found files。也许您在此处显示的代码不是您实际运行的代码,或者您有一些非标准的find。通常,您会写find /p/a/t/h -iname ...告诉find要查看的目录。 -
@Roadowl 是的,我尝试了第一个 if 的点和相同的错误,第二个 if 的成功。
-
ShellCheck 自动检测这个不带引号的变量扩展问题
-
@maskeerr,顺便说一句,回复:您已删除的“答案”以及后续问题,请注意
for item in $(anything)本身就是不好的做法。请参阅 BashPitfalls #1 说明原因以及更安全的替代方法,请参阅 UsingFind 关于操作的部分(即第 5 到第 7 部分)。