rsync --exclude 使用 bash 变量时的问题

rsync --exclude issue when using bash variable

我需要在 bash 中使用 rsync 将源目录复制到目标目录下,排除具有特定扩展名 (.qcow2) 的文件。当我尝试手动输入命令时它工作正常,但是当使用 bash 变量时失败。

我设置了一个bash变量,下面是它的内容:

# echo $line
/mnt/source --exclude='*.qcow2'

虽然有排除参数,但rsync正在复制“.qcow2”文件:

# rsync -av $line destination/
sending incremental file list
source/Atlas/
source/Atlas/atlas.sh
source/Atlas/atlas.qcow2

sent 2143238309 bytes  received 56 bytes  115850722.43 bytes/sec
total size is 2143164594  speedup is 1.00

同时 rsync 正在 运行ning 我可以看到如下过程:

# ps -ef | grep rsync
root     39058 11032 62 14:56 pts/22   00:00:01 rsync -av /mnt/source --exclude='*.qcow2' destination/
root     39059 39058  0 14:56 pts/22   00:00:00 rsync -av /mnt/source --exclude='*.qcow2' destination/
root     39060 39059 71 14:56 pts/22   00:00:02 rsync -av /mnt/source --exclude='*.qcow2' destination/
root     39066 14866  0 14:56 pts/24   00:00:00 grep rsync

".qcow2"文件是上面复制的,这是我要避免的。

当我 运行 没有变量的相同命令时,如 ps 输出所示(删除目标目录中的文件后),它正常工作,“.qcow2”文件是未转移:

# rm -f destination/Atlas/*
# rsync -av /mnt/source --exclude='*.qcow2' destination/
sending incremental file list
source/Atlas/
source/Atlas/atlas.sh

sent 14956 bytes  received 37 bytes  29986.00 bytes/sec
total size is 202930  speedup is 13.53

如何使用 bash 中的变量来避免“.qcow2”文件传输?

提前致谢

您的变量中的引号已关闭。试试这个:

$ line='/mnt/source --exclude=*.qcow2'
$ echo $line
/mnt/source --exclude=*.qcow2
$ rsync -av $line destination/