我有一个脚本在find命令中出错:
echo "find ${logPath} -mtime +${cutOffDays} -type f -name ${dateInNameLogs}.log -depth 1 -print -delete 2>&1" >>$logFile
rslt=$(find ${logPath} -mtime +${cutOffDays} -type f -name ${dateInNameLogs}.log -depth 1 -print -delete 2>&1)
日志文件显示:
find /Users/craig/Desktop/logs -mtime +21 -type f -name *[0-9][0-9][0-9][0-9][-_][0-9][0-9][-_][0-9][0-9].log -depth 1 -print -delete 2>&1
rslt = find: 1: unknown primary or operator
如果我复制显示的find命令并在终端执行,它可以正常工作。所以我的rslt = $(...行。
是错的我错过了什么?
感谢。
答案 0 :(得分:3)
引用你的扩展:
rslt=$(find "${logPath}" \
-mtime "+${cutOffDays}" \
-type f \
-name "${dateInNameLogs}.log" \
-depth 1 \
-print \
-delete \
2>&1)
引用"${dateInNameLogs}.log"
(用双引号)告诉shell扩展变量,但不是以将结果扩展为glob(或通过单词拆分),从而确保该值由find
评估,而不是由您的shell评估。
即使设置了nullglob
,failglob
或类似选项,这也会使行为变得健壮。
答案 1 :(得分:0)
原来这是由&shop; -s nullglob'引起的。我的脚本做了不止一件事,我把它设置在文件的顶部。我已经将它移动到需要的位置,现在脚本运行正常。