![rsync想要复制目标目录中已经存在的文件](https://linux22.com/image/8325/rsync%E6%83%B3%E8%A6%81%E5%A4%8D%E5%88%B6%E7%9B%AE%E6%A0%87%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%B7%B2%E7%BB%8F%E5%AD%98%E5%9C%A8%E7%9A%84%E6%96%87%E4%BB%B6.png)
我正在尝试使用 rsync 执行以下命令来仅复制以下文件
- 是新的
- 有不同的尺寸
rsync -niav --size-only /home/me/source/Electronica /media/externalDrive/dest/Electronica
但是,此试运行会产生以下输出:
>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
我将其解释为这些文件已被复制。但它们的尺寸是一样的! (不过,时间和旗帜不同)。 rsync 还指的是外部硬盘驱动器(具有不同的格式)。
我还尝试了以下命令:
rsync -niav --size-only --ignore-times /home/me/source /media/else
rsync -niav --size-only --ignore-existing /home/me/source /media/else
但这些文件仍然以相同的方式显示,这意味着它们会被复制。我还能尝试什么?
主页描述有什么问题?
--size-only skip files that match in size
答案1
你已经陷入了rsync
经典的“尾部斜杠陷阱”:
如果源路径不以斜杠结尾,rsync
则会复制源文件目录。如果您打算复制内容源目录的,它需要以斜杠结尾。
让我们看一个示例,假设您要复制位于以下位置的文件/home/me/source/Electronica/music/Folder.jpg
:
rsync -a /home/me/source/Electronica /media/externalDrive/dest/Electronica
将复制Electronica
目录从源到目的地,因此它将创建/media/externalDrive/dest/Electronica/Electronica/music/
并放入Folder.jpg
其中。
rsync -a /home/me/source/Electronica/ /media/externalDrive/dest/Electronica
将复制内容目录的Electronica
目录,因此它将复制music
下的目录/media/externalDrive/dest/Electronica/
(如果不存在)并Folder.jpg
最终位于/media/externalDrive/dest/Electronica/music/Folder.jpg
.
为了让事情变得更加混乱,它确实不是不管目的地路径以斜线结束。
只要养成用斜杠结束所有路径的习惯rsync
,那么您就可以避免任何令人讨厌的意外。