因此,我正在编写备份脚本,并且想跳过 .iso 文件。
如果我从命令行使用命令,一切正常:
rsync -a --delete --exclude='*.iso' /home/user/Desktop/Work /mnt/profile/Desktop/
但是,当我尝试在脚本中使用它时,没有获得“排除”设置,并继续复制 .iso 文件。这是脚本:
#!/bin/bash
set -e
SRC_DIR="/home/user/Desktop/Work"
DST_MOUNTPOINT="/mnt/profile"
DST_DIR="/mnt/profile/Desktop/"
OPTIONS=" --exclude='*.iso' "
mountpoint -q $DST_MOUNTPOINT || mount $DST_MOUNTPOINT
rsync -a --delete $OPTIONS $SRC_DIR $DST_DIR
如果我运行脚本,获取其 PID 并检查 /proc/PID/cmdline,则排除设置就在那里。
我做错了什么?
答案1
您在排除模式上加上引号。
OPTIONS=" --exclude='*.iso' "
rsync $OPTIONS
这里,OPTIONS
包含.由于命令行上没有引用它,因此会发生分词,删除末尾的空格。但字符串中的单引号仍然存在,并被传递给.该模式不匹配,因为文件名的开头和结尾不可能带有引号。<space>--exclude='*.iso'<space>
rsync
rsync
删除多余的引号(和空格)并引用您的变量:
OPTIONS="--exclude=*.iso"
rsync "$OPTIONS" "$SRC_DIR" "$DST_DIR"