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

Fed*_*eli 6 command-line backup rsync 21.10

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

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

rsync -Rav --delete --stats /home/my_user/bin* "$dest"
Run Code Online (Sandbox Code Playgroud)

$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)
Run Code Online (Sandbox Code Playgroud)

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

笔记:rsync version 3.2.3 protocol version 31

pLu*_*umo 9

您可以使用--include/--exclude像:

rsync -Rav --delete \
  --include="/home/my_user/bin*" \
  --exclude="/home/my_user/*" \
/home/my_user/ "$dest"
Run Code Online (Sandbox Code Playgroud)

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