我想使用 rsync 将文件从我的计算机传输到远程 Linux 系统。无论本地文件的组所有权如何,我都想在远程端设置这些值。
如果我在远程 Linux 系统上,我可以创建目录并将所有权和权限设置为:
mkdir my_directory
chown :my_group my_directory
chmod 775 my_directory
Run Code Online (Sandbox Code Playgroud)
如果我在本地创建目录,然后使用 rsync(请记住,我本地没有 my_group),我会这样做:
rsync -ae ssh --chmod=ug+rw,Dug+rwx my_directory remoteserver:dest
Run Code Online (Sandbox Code Playgroud)
这有效,但我无法弄清楚如何通过 rsync 设置组所有者。如果我执行 a chmod g+s dest,则 my_directory 具有正确的组所有者,但其中的所有文件的组所有者都不正确。
我经常传输大型目录,scp如果我能以某种方式压缩目录、发送它并将其全部解压缩,那将会很美妙。
这样的事情可能吗?
我正在寻找在 NAS 和多个本地 mac 之间同步文件夹对的解决方案。每个 mac 都可以编辑文件,然后其他 mac 应该自动同步。基本上是我自己的本地版 Dropbox,不使用“云存储”。
我已经研究过使用 rsync 的解决方案。据我了解, rsync 并不能真正进行双向同步。我也不想一定要调用同步过程。我更喜欢在后台运行的守护进程 - 等待并检查更改,然后“实时”同步它们。
该程序还应该足够灵活,以识别它有时(在笔记本电脑的情况下)无法访问 NAS。然后它应该等待连接再次恢复,而不会打扰我几分钟。
我已经研究过 Synk、folderwatch、rsync、unison 和其他一些,但我还没有真正找到解决方案。它们要么需要被调用,要么它们不是真正双向的。
mac 上不是有微软的“离线文件夹”之类的东西吗?
谢谢
PS:只是为了澄清 - 我不想为了备份目的而同步,而是想同步以便所有 mac 都有最近文件更改的本地副本。
我需要能够将 Windows 7 x64 笔记本电脑上的内容定期同步到我的异地 CentOS 6 网络服务器。
是否有像 rysnc 的 WinSCP 或类似工具/模式?
出于各种原因,Dropbox 不是这里的选项。
我有一台机器在几跳之外,我需要设置端口转发才能传输文件。
编辑:需要明确的是,需要多跳才能访问远程机器。在我的机器上,我设置了一个 VPN,我可以在其中访问 10.255.xx - 这是我可以通过 VPN 连接的唯一机器。一旦登录到 .xx,我就可以连接到其他机器 - .yy 就是其中之一。
从我的机器:
ssh -L 4567:localhost:4567 me@10.255.x.x
Run Code Online (Sandbox Code Playgroud)
然后从那台机器:
ssh -L 4567:localhost:22 me@10.255.y.y
Run Code Online (Sandbox Code Playgroud)
那我可以
scp -P 4567 me@localhost:/path/to/large/file.gz .
Run Code Online (Sandbox Code Playgroud)
我让这个运行过夜,才发现转移在某个时候死了。
我已经看到一些建议使用 rsync over ssh 来恢复传输,但我不清楚如何设置。这可能吗?
最近,我不得不将 Mac 的文件系统从保留大小写更改为完全区分大小写。我通过使用 CCC 并将数据复制到另一个磁盘,然后返回到新格式化的主磁盘来做到这一点。
现在,我想在我的旧 Time Machine 磁盘上进行 Time Machine 备份,该磁盘托管在我的基于 FreeBSD 的 NAS 上,通过 AFP 导出。但是,我收到文件系统不匹配的错误,因为 Time Machine 仍然具有不区分大小写的 fs。这一次,我不能使用 CCC,因为它不支持 Time Machine 卷的文件级复制。
自然地,我直接选择了 rsync,但这会引发一个问题——如果我使用以下命令运行它:
/usr/local/bin/rsync --super -aEHAXNvx --fileflags --delete /Volumes/Time\ Machine\ Backups/ /Volumes/NewDisk/
Run Code Online (Sandbox Code Playgroud)
它一碰到Backups.backupdb/<machinename>文件夹就开始抱怨,带有failed to set permissions, operation not permitted. 这里的问题是复制 ACL,这是非常严格的:
ll -dle /Volumes/Time\ Machine\ Backups/Backups.backupdb/<machinename>/
drwxr-xr-x@ 19 root staff 646 Dec 23 09:38 /Volumes/Time Machine Backups/Backups.backupdb/<machinename>/
0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown
Run Code Online (Sandbox Code Playgroud)
所以,我-A从上面的命令中删除了,rsync 现在很高兴地移动 GB 的数据。
唉,我也想保留 ACL。这有可能吗?OS X 没有 …
我最近从 Ubuntu Desktop 13.04 迁移到 Ubuntu Server 13.10,现在我的文件系统似乎不支持 unicode 字符。我使用 rsync 来备份/同步文件,它显示了正确的字符,但它想删除不匹配的文件名并创建一个转义版本。
例如:
root@ubuntu-server:~# rsync -avh --progress --delete --dry-run --exclude \$RECYCLE.BIN /media/source/ /media/target/
deleting Tiësto - Ten Seconds Before Sunrise.mp3
Ti\#353sto - Ten Seconds Before Sunrise.mp3
Run Code Online (Sandbox Code Playgroud)
另外,如果我将 unicode 文件复制到文件系统,它会显示为:
drwxr-xr-x 3 root root 4096 Jan 21 2013 DJ Ti?sto/
Run Code Online (Sandbox Code Playgroud)
我尝试通过安装 unicode 库,apt-get install unicode但这似乎没有解决问题。
更新:现在这可能是内核问题。我正在复制 samba/cifs 并尝试通过指定 utf8 字符集,mount -t cifs //192.xxx.xxx.xxx/source/ /media/target/ -o iocharset=utf8但这会产生错误...
mount error(79): Can not access a needed shared library
Refer to …Run Code Online (Sandbox Code Playgroud) 我想将我的工作目录 rsync 到另外两个目录。一个目的地用于备份,另一个用于测试。我试过这个:
rsync -av --exclude='.git' source dest1,dest2
Run Code Online (Sandbox Code Playgroud)
但是后来我收到错误 -'dest1,dest2'找不到目录。所以它看起来像是一个目录路径。当然,我会使用不同的目标目录运行命令两次,但这加起来,我想总是 rsync 而不需要使用多个命令。
有可能做这样的事情吗?
有没有办法rsync以干净的方式告诉尽可能停止?两种选择:
rsync停止传输当前文件,清理任何临时文件并退出;rsync结束当前文件的传输然后停止。这样做Ctrl + C确实会在传输过程中停止并将临时文件留在那里,对吗?
即使使用--inplace? 最好的做法是什么?我正在使用rsyncwith--inplace并且我必须快点,我怎么能说“可能会以这个文件结束然后退出,或者现在退出,但是清理你正在复制的这个文件,这样你就不会留下损坏的东西(我不关心它是否被删除,我可以稍后再次备份)”或类似的东西。
我经常通过 FTP(用于 Web 开发的 CSS 文件)对相当大的文本文件进行小的更改,因为我的互联网连接非常慢,这是一个非常痛苦的过程。
即使我只更改文件的一个字符,我仍然需要等待相当长的时间,整个文件会重新上传到服务器。
有什么方法可以在我的本地计算机上编辑远程托管的文件,当我保存文件时,只上传文件中发生更改的部分?
编辑:我想我目前还不清楚我是如何使用我的 FTP 客户端的。基本上,我使用 WinSCP 通过 SFTP 打开一个远程文件。WinSCP 将它保存到一个 tmp 文件夹,启动 Sublime Text,然后我开始编辑它。当我点击保存时,WinSCP 会自动重新上传文件。我实际上从未将文件永久保存在我的计算机上 - 一切都是通过 WinSCP 的临时文件夹完成的。这就是为什么我正在寻找一种可以以这种“即打即跑”的方式使用的解决方案。
我之前在 ServerFault上发布了这个问题,其中建议使用 git 之类的东西,但是正如我所解释的:
使用 git 或类似的版本控制工具,我每次保存文件时都必须进行提交,对吗?即使这可以自动完成(即,如果我有一个宏在 Sublime Text 保存文件中创建 Ctrl-S 并同时执行 git push),我可能每小时对 CSS 文件进行 50 - 100 次微小的编辑;我肯定会得到一个垃圾邮件提交日志?此外,git 解决方案是不灵活的,因为它依赖于我正在编辑的任何文件作为 git repo 的一部分。
到目前为止,我能想到的唯一解决方案是使用 rsync 进行某种修改过程,但即便如此,它也非常繁琐:
但是,我需要手动设置或指定远程文件或目录路径,否则本地 rsync 脚本将不知道在哪里 rsync 文件,因此这种方法仍然非常不灵活。这种方法不会让我立即浏览到一个随机文件,打开它并像 FTP 客户端那样保存它。
使用此方法也没有像上传进度条这样的可见反馈。
rsync ×10
backup ×2
scp ×2
sync ×2
acl ×1
command-line ×1
dropbox ×1
filesystems ×1
ftp ×1
gzip ×1
kill ×1
linux ×1
mac ×1
macos ×1
nas ×1
permissions ×1
scheduling ×1
ssh ×1
ssh-tunnel ×1
unicode ×1
winscp ×1