OSX SSH rsync-使远程目录保持最新


11

我主要来自Windows背景,迁移到Mac。我使用过WinSCP,并且喜欢一个名为“保持远程目录最新”的功能

问题是:OSX是否有一个等效的SCP客户端,它将监视目录的更改并在检测到该目录时上载?我不在乎它是GUI客户端还是通过命令行(rsync,ssh等)。

Answers:



12
alias run_rsync='rsync -azP --exclude ".*/" --exclude ".*" --exclude "tmp/" /source_folder username@host:/destination_folder'
run_rsync; fswatch -o . | while read f; do run_rsync; done

第二行run_rsync无条件运行一次,然后-在当前目录的每次更改中运行(或指定确切的路径,而不是.

您将需要fswatch-这是如何通过brew安装:

brew install fswatch

Rsync选项:

  • -a-表示“存档”,并递归同步并保留符号链接,特殊文件和设备文件,修改时间,组,所有者和权限。
  • -z-压缩
  • -P-组合标志--progress和--partial。其中的第一个为您提供传输进度条,第二个使您可以恢复中断的传输
  • --exclude-按模式排除文件

你让我真的糊涂了一阵,因为sync是一个系统实用程序(至少在每一个* nix的我见过,不知道OSX,但看不到reaosn为什么它不会在那里)。您可能想给您的狙击一个不同的名字。此外,这不会通过OP想要的SSH进行;简单地传递-e ssh给rsync应该可以解决该问题。
CVn

@MichaelKjörling:+1:固定,谢谢您的通知!
丹尼尔(Daniel)

我不理解您的排除条款,您能解释一下吗?
撒尿

1

您可以使用launchd而不是文件夹操作(要获取一些示例代码,只需google for:launched folder watcher)。

然后,您可以结合你的launchd有类似SCP脚本文件夹观察家项这一项

或者,通过ssh使用rsync,如下所示:

rsync -urltv --delete -e ssh /path/to/dir othermachine:/path/to/dir

有关商业的跨平台软件解决方案,请参见GoodSync


0

检出恐慌发送。从他们的一篇博客文章中,评论者说:

当您在Transmit中将某个文档打开到某个应用程序中时(有人将.html文件放入BBEdit中),然后编辑该文档并将其保存,这是某些人可能不知道的我最喜欢的功能之一;传输自动将其上传回服务器到同一文件,而不会出现任何问题。在制作网站和编辑CSS时会产生奇迹。通过Photoshop在图像中进行较小的校正也很方便。您还可以通过Prefs处理Transmit如何处理某些文件扩展名。


我已经研究了传输-不幸的是,它不支持SCP-仅支持SFTP连接。此外,发送拒绝打开我的私钥文件。
pygorex1 2011年

此功能有所不同。这只是意味着您可以使用所选的编辑器直接从远程服务器编辑文件。其他FTP程序也支持此功能。
丹尼尔·贝克


0

嗯,我遇到了同样的问题,可以将它们一起使用:rsync,SSH无密码登录,Watchdog(Python同步实用程序)和Terminal Notifier(由Ruby制成的OS X通知实用程序)。不需要,但有助于了解同步完成后)。

  1. 我使用Dreamhost Wiki:http ://cl.ly/MIw5的本教程创建了无密码登录的密钥。

    1.1。完成后,测试一切正常……如果无法无密码登录,也许您必须尝试进行afp挂载。Dreamhost(在我的网站所在的位置)不允许afp挂载,但允许无密码登录。在终端中,键入:

    ssh username@host.com 您应该登录时不要求输入密码:P

  2. 我从Github页面安装了终端通知程序:http : //cl.ly/MJ5x

    2.1。我使用了Gem安装程序命令。在终端中,键入:

    gem install terminal-notifier

    2.3。测试通知是否有效。在“终端”中,键入:

    terminal-notifier -message "Starting sync"

  3. 创建一个sh脚本来测试rsync +通知。使用您喜欢的名称将其保存在您喜欢的任何位置。在此示例中,我将其称为〜/ Scripts / sync.sh我使用了“ .sh扩展名,但是我不知道是否需要它。

    #!/bin/bash terminal-notifier -message "Starting sync" rsync -azP ~/Sites/folder/ user@host.com:site_folder/ terminal-notifier -message "Sync has finished"

    3.1。请记住要授予对此sh脚本的执行权限。在终端中,键入:

    sudo chmod 777 ~/Scripts/sync.sh 3.2。运行脚本并验证消息是否正确显示,并且rsync实际上将本地文件夹与远程文件夹同步。

  4. 最后,我从Github页面下载并安装了Watchdog:http//cl.ly/MJfb

    4.1。首先,我使用Brew安装了libyaml依赖项(如何安装Brew有很多帮助-像OS X的“能力”)。在终端中,键入:

    brew install libyaml

    4.2。然后,我使用了“ easy_install命令”。进入看门狗的文件夹,然后输入Terminal:

    easy_install watchdog

  5. 现在,一切都已安装!转到要同步的文件夹根据需要更改此代码,然后输入Terminal:

      watchmedo shell-command
          --patterns="*.php;*.txt;*.js;*.css" \
          --recursive \
          --command='~/Scripts/Sync.sh' \
          .
    

    它必须完全是这种方式,带有斜线和换行符,因此您必须将这些行复制到文本编辑器,更改脚本,粘贴到终端,然后按回车键。

    我尝试了没有换行符,但它不起作用!

    在我的Mac中,我总是会收到一个错误,但似乎没有任何影响:

    /Library/Python/2.7/site-packages/argh-0.22.0-py2.7.egg/argh/completion.py:84: UserWarning: Bash completion not available. Install argcomplete.

    现在,在文件夹内的文件中进行一些更改,然后观看魔术!

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.