rsync 想要复制目标目录中已经存在的文件

Ale*_*lex 6 rsync

我正在尝试使用 rsync 仅复制以下命令

  • 是新的
  • 有不同的尺寸
rsync -niav --size-only   /home/me/source/Electronica  /media/externalDrive/dest/Electronica
Run Code Online (Sandbox Code Playgroud)

但是,此试运行会产生以下输出:

>f+++++++++ Electronica/music/AlbumArt_{F0CB439F-A1FC-47DB-A698-C561191F3FDE}_Large.jpg
>f+++++++++ Electronica/music/AlbumArt_{F0CB439F-A1FC-47DB-A698-C561191F3FDE}_Small.jpg
>f+++++++++ Electronica/music/Folder.jpg
Run Code Online (Sandbox Code Playgroud)

我解释为这些文件被复制。但它们的大小相同!(不过,时间和标志是不同的)。此外 rsync 指的是外部硬盘驱动器(具有不同的格式)。

我还尝试了以下命令:

rsync -niav --size-only --ignore-times  /home/me/source  /media/else
rsync -niav --size-only --ignore-existing /home/me/source  /media/else
Run Code Online (Sandbox Code Playgroud)

但是,这些文件仍然以相同的方式显示,这意味着它们会被复制。我还能尝试什么?

主页描述有什么问题?

--size-only     skip files that match in size
Run Code Online (Sandbox Code Playgroud)

n.s*_*.st 13

你已经陷入了rsync经典的“尾部斜杠陷阱”:
如果源路径不以斜杠结尾,rsync则会复制源目录。如果您打算复制源目录的内容,则需要以斜杠结尾。

让我们看一个例子,假设你想复制一个文件/home/me/source/Electronica/music/Folder.jpg

rsync -a /home/me/source/Electronica  /media/externalDrive/dest/Electronica
Run Code Online (Sandbox Code Playgroud)

会将Electronica 目录从源复制到目标,因此它将创建/media/externalDrive/dest/Electronica/Electronica/music/并放入Folder.jpg那里。

rsync -a /home/me/source/Electronica/  /media/externalDrive/dest/Electronica
Run Code Online (Sandbox Code Playgroud)

将复制内容的的Electronica目录,所以它会复制music目录下/media/externalDrive/dest/Electronica/(如果不存在的话),并Folder.jpg会在结束了/media/externalDrive/dest/Electronica/music/Folder.jpg


更令人困惑的是,目标路径是否以斜杠结尾并不重要。

只要养成rsync用斜线结束所有路径的习惯,那么您就可以避免任何令人讨厌的惊喜。

  • 是的,我刚刚意识到。我身上经常发生... (2认同)