说我有
SRC
001.jpg
002.jpg
001.txt
a.zip
DEST
hello.jpg
rsync -d --delete SRC:{*.jpg,*.txt} DEST
它不会从 DEST 中删除 hello.jpg,知道如何存档吗?
答案1
您的命令不起作用的原因由rsync 的手册页(强调):
- 删除
这告诉 rsync 从接收端删除无关文件(不在发送端的文件),但仅限于正在同步的目录。 您必须要求 rsync 发送整个目录(例如“dir”或“dir/”),而不使用目录内容的通配符(例如“dir/*”),因为通配符由 shell 扩展,因此 rsync 会得到一个请求传输单个文件,而不是文件的父目录。 从传输中排除的文件也不会被删除,除非您使用 --delete-excluded 选项或将规则标记为仅在发送端匹配(请参阅过滤规则部分中的包含/排除修饰符)。
因此,当你跑步时
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
DEST 中不需要的文件不会被删除,因为您实际上并没有要求同步目录,而只是要求同步少数特定文件。要获得您想要的结果,请尝试以下操作:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
请注意,包含和排除指令的顺序很重要。本质上,每个文件都会按照包含或排除模式出现的顺序进行检查。因此,具有 .jpg 或 .txt 扩展名的文件会被同步,因为它们在匹配排除的“*”模式之前先匹配“包含”模式。其他一切都被该--exclude '*'
模式排除在外。该--delete-excluded
选项确保甚至 DEST 端排除的文件也被删除。