下面的脚本在从 bash 运行时会忽略所有 -x 排除参数,但它在命令行中运行良好:
#!/bin/sh
TIMESTAMP=$(date +%u)
ulimit -s 65536
WEEK=`date +"%V"`
if [ $(($WEEK%2)) -eq 0 ];
then
echo "even";
BACKUP_DIR="/mnt/backup/2_$TIMESTAMP"
mkdir -p "$BACKUP_DIR/www"
else
echo "odd";
BACKUP_DIR="/mnt/backup/1_$TIMESTAMP"
mkdir -p "$BACKUP_DIR/www"
fi
if [ $(date +%u) -gt 6 ];
then
/usr/bin/zip -r -y $BACKUP_DIR/www/web.zip /var/www/ -x '*/.opcache/*' -x '*/phpThumb/cache/*'
else
/usr/bin/zip -r -y $BACKUP_DIR/www/web.zip /var/www/ -x '*/mycompany/files/*' -x '*/.opcache/*' -x '*/xml_extras/*' -x '*/files_admin/extras/*' -x '*/chatFiles/*' -x '*/phpThumb/cache/*' -x '*/backup-guard/*' -x '*/mailer/*' -x '*/mycompany/attachments/*'
fi
exit 0
这是一个 14 天的备份解决方案,我希望工作日忽略较大的文件夹(如图像)。-x 参数被忽略的原因是什么?
答案1
我通过删除前面的“*/”并使用绝对路径解决了这个问题。我仍然不知道为什么这些在终端中有效,为什么在具有正确括号和转义的脚本中无效。