it-swarm.cn

通过rsync从dest目录中删除无关的文件?

说我有

SRC 
  001.jpg
  002.jpg
  001.txt
  a.Zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

它不会从DEST中删除hello.jpg,知道如何将其归档吗?

51
Cheng

rsync的手册页 (添加了强调)说明了命令不起作用的原因:

- 删除

这告诉rsync从接收方(不在发送方的文件)删除无关的文件,但仅删除正在同步的目录。 您必须已经要求rsync发送整个目录(例如“ dir”或“ dir /”),而不使用通配符作为目录内容(例如“ dir/*”),因为通配符是由Shell扩展并通过rsync进行扩展,因此得到了传输单个文件的请求,而不是文件的父目录。除非您使用-,否则也将不删除从传输中排除的文件。 delete-excluded选项或将规则标记为仅与发送方匹配(请参见“ FILTER RULES”部分中的“ include/exclude”修饰符)。

因此,当您跑步时

$ rsync -d --delete SRC:{*.jpg,*.txt} DEST

dEST中不需要的文件不会被删除,因为您实际上并没有要求同步目录,而只是要求一些特定文件。要获得所需的结果,请尝试以下操作:

rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/

请注意,include和exclude指令的顺序很重要。本质上,每个文件都按照包含或排除模式出现的顺序进行检查。因此,具有.jpg或.txt扩展名的文件将被同步,因为它们在与排除的“ *”模式匹配之前便与“包含”模式匹配。 --exclude '*'模式排除了其他所有内容。 --delete-excluded选项可确保删除DEST端的排除文件。

73
Steven D