Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 与rsync双向同步_File_Sync_Rsync_Two Way - Fatal编程技术网

File 与rsync双向同步

File 与rsync双向同步,file,sync,rsync,two-way,File,Sync,Rsync,Two Way,我有一个文件夹a/和一个远程文件夹a/。 现在,我在Makefile上运行类似的操作: get-music: rsync -avzru server:/media/10001/music/ /media/Incoming/music/ put-music: rsync -avzru /media/Incoming/music/ server:/media/10001/music/ sync-music: get-music put-music 当我制作同步音乐时,它首先获取从服务器到本

我有一个文件夹a/和一个远程文件夹a/。 现在,我在Makefile上运行类似的操作:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music
当我制作同步音乐时,它首先获取从服务器到本地的所有差异,然后相反,将所有差异从本地发送到服务器

只有在将来只有更新或新文件时,这种方法才能很好地工作。如果有删除,它不会做任何事情

在rsync中有--delete和--delete after选项来帮助实现我想要的功能,但问题是,它在双向同步上不起作用

如果我想删除syn上的服务器文件,当本地文件被删除时,它会起作用,但是如果由于某种原因(后面解释)我有一些文件不在服务器中,但它们在本地存在,并且被删除了,我想在本地删除它们,而不是复制服务器(正如发生的那样)

问题是我有3台机器:

  • 桌面
  • 记事本
  • 家庭服务器
  • 所以,有时候,服务器上的文件会被笔记本同步删除,例如,当我与我的桌面(已删除的服务器文件仍然存在)运行同步时,我希望这些文件被删除,而不是再次复制到服务器上

    我想这只有在数据库和操作跟踪的情况下才可能实现:p

    有更简单的解决方案吗? 谢谢。

    试试Unison:

    语法:
    
    齐声dirA/dirB/
    

    Unison询问当文件不同时该怎么做,但您可以通过使用以下接受默认(非冲突)选项的选项来自动化该过程:

    unison-自动dirA/dirB/


    unison-batch dirA/dirB/
    不询问任何问题,并写入输出忽略了多少文件(因为它们冲突)。

    您也可以尝试bitpocket:

    我不确定它是否适用于两个同步,但要使--delete起作用,还需要添加--recursive参数

    试试这个

    get-music:
     rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/
    
    put-music:
     rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/
    
    sync-music: get-music put-music
    

    我只是测试了一下,它对我有效。我正在Windows7(使用安装了rsync包的cygwin)和FreeNAS文件服务器(FreeNAS在预装rsync包的FreeBSD上运行)之间进行双向同步。

    您可以试试,它是的引擎盖下的同步引擎。

    您可以使用Osync:,它是基于rsync的智能删除传播。它还有多个选项,如恢复暂停执行、软删除和时间控制。

    由于最初的问题还涉及台式机和笔记本电脑以及涉及音乐文件的示例(因此他可能正在使用GUI),我还要提到迄今为止最好的双向、多平台、免费和开源程序之一:


    它是基于GUI的,非常快速和直观,带有过滤和许多其他选项,包括远程连接、查看和交互管理“冲突”(例如,具有类似时间戳的文件)以及在双向传输、镜像等之间切换的功能。

    我现在使用SparkeShare

    适用于mac、linux和windows。

    正是您所需要的。Rclone(“rsync for cloud storage”)是一个命令行程序,用于在不同的云存储提供商(包括本地文件系统)之间同步文件和目录。Rclone以前称为Swiftsync,从2013年开始提供。

    您可以使用它来保持文件夹与远程同步:

    pip install cloudsync
    pip install cloudsync-gdrive
    cloudsync sync file:c:/users/me/documents gdrive:/mydocs
    
    如果远程设备是NFS,则可以使用:

    cloudsync sync file:c:/users/me/documents/ file:/mnt/nfs/whatevs
    

    我很惊讶还没有人提到。多年来,我一直使用它来同步我的手机、平板电脑和两台笔记本电脑。有一次,我还使用它将10 GB的照片直接从我的电脑发送到600公里外的家人的电脑上,速度非常快(尽管数据通过Syncthing的discovery server路由以解决NAT问题)。我也曾尝试过OwnCloud/NextCloud,但Syncthing更可靠,速度也更快。

    我也有同样的问题。你找到解决办法了吗,嗯?我现在真的找到了。我试图获得类似dropbox的体验,并提出了一个解决方案,其中包括unison(使用rsync)和lsyncd来监控文件更改。我还发现其他人使用这个解决方案和更多的技巧。现在我在我的家庭服务器上本地使用nextcloud。完美的“dropbox”解决方案100%由我管理。有android/ios/win/macos/linux/web客户端。这不会删除新的本地文件吗
    -u
    跳过目标上较新的文件,但rsync没有跟踪删除时间的方法,因此此脚本如何区分本地文件是新文件(应保留)还是旧文件(应删除)?或者我误解了吗?
    --delete excluded
    是否删除存在于目标目录而非源目录中的任何文件?我认为您必须定义
    --exclude=
    ,所以rsync不会只删除这些排除吗?或者rsync是否将所有非源目录文件视为“排除”?找到了答案:除了删除接收端不在发送端的文件外,这告诉rsync还删除接收端被排除(请参阅--exclude)的任何文件,如果我在目标上创建一个文件,然后执行rsync命令从源复制到目标,它将删除目标上的文件,因为没有使用时间戳。这不是你想要的,对吗?@Lübnah:对;此解决方案不是完全双向同步:因为先以服务器作为源运行带
    --delete excluded
    的rsync:本地添加的文件将在运行期间删除(而添加到服务器的文件将复制到本地目标)。同步回服务器的唯一本地文件是也存在于服务器上并在本地修改过的文件(比服务器版本更新),这在OP的场景中不太可能。正如您所提示的,我认为真正的双向同步不能用
    rsync
    完成,因为需要在运行之间保存状态。选项
    --recurse