在bash中同步两个本地文件夹


23

我的主目录中有一个大文件夹“ X”,并且已在闪存驱动器上将其过时了-Y。这是什么类似物rm Y; cp X Y,但不会覆盖现有文件?

Answers:


26

rsync的属性比前面的答案提到的要多得多。您应该亲自调查一下它们:

man rsync

但是对于您的问题,我建议:

rsync -a --delete X Y

这样,接收者(Y)将删除X中没有的任何文件。但是请确保您做对了。以root身份错误使用会轻易杀死您的系统... :)


1
同意您应该对此非常小心。尝试在命令中添加--dry-run以查看将发生的情况,而无需实际进行任何更改。如果一切顺利,请执行相同的命令而不使用--dry-run
squarecandy 2015年

进行了一次小的更正后,我花了一段时间才达到:rsync -a --delete X/ Y。X之后的小斜线使其按我的预期工作,因此也可能对其他人有所帮助。在此处解释:abbeyworkshop.com/howto/unix/nix_rsync/index.html
Shovalt,

15

看一下rsync(1)。它旨在几乎完全满足您的需求。

rsync -av X Y

它通过自己的协议或ssh支持远程复制,但也可以在本地使用。

根据您想要的确切行为,您可能还希望传递该--update选项。这将告诉rsync不要覆盖目标上已经存在并且比源文件中新的文件。

如果要删除多余的文件(即Y中存在但X中不存在的文件),则可以添加--delete选项。


但是它不会删除文件,而是会在X中删除rm Y; cp X Y

为了删除从X删除的文件,请使用--delete选项。
csonuryilmaz 2015年

0

尝试使用rsnyc,可能使用以下命令:

rsync -avzu /home/x /y

-u =如果修改了文件,则不要覆盖目标文件


但是它不会删除文件,而是会在X中删除rm Y; cp X Y

0

我认为您在选项-u(更新)中寻找的某些功能实际上存在于此选项中:

“ --ignore-existing”-跳过更新接收器上存在的文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.