在 `rsync` 命令的“源”中使用通配符

在 `rsync` 命令的“源”中使用通配符

我正在尝试使用 备份另一个驱动器上的一些文件rsync

作为测试用例,我正在尝试以下命令:

rsync -Rav --delete --stats /home/my_user/bin* "$dest"

$HOME此命令将把存在于我的目录中且名称为 ~/bin~/binb~/bin1、等的文件和目录(及其内容)复制~/bin2到目标。

~/bin1但是,当我删除任何名为或的文件或目录时~/bin2,目标中的文件或目录不会也删除。唯一可行的方法是,如果目录中有一个文件,并且删除了此文件,则目标中的文件也会被删除(但删除整个~/bin2/file1目录时则不会)。~/bin2/

显然,这个问题是由于 shell在执行命令时扩展到我的目录中/home/my_user/bin*以 开头的所有文件和目录名而导致的。因此,我尝试像这样引用源代码,但在这种情况下我得到了错误:bin$HOMErsync"/home/my_user/bin*"

rsync: [sender] link_stat "/home/my_user/bin*" failed: No such file or directory (2)

需要什么选项,那么,我可以对源使用通配符,并且在目标中我也将获得源文件和目录结构的精确副本?

笔记:rsync version 3.2.3 protocol version 31

答案1

您可以使用--include/--exclude喜欢:

rsync -Rav --delete \
  --include="/home/my_user/bin*" \
  --exclude="/home/my_user/*" \
/home/my_user/ "$dest"

但我认为如果采用不同的结构,只同步一个父目录会更容易。

相关内容