【问题标题】:How to RSYNC a single file?如何 RSYNC 单个文件?
【发布时间】:2013-01-31 00:47:49
【问题描述】:

目前我只对Directories 进行 RSync,如下所示:

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

那么我如何rsync 一个文件,例如/var/www/public_html/.htaccess

【问题讨论】:

    标签: linux file rsync


    【解决方案1】:

    您的操作方式与处理目录的方式相同,但您将文件名的完整路径指定为源。在您的示例中:

    rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/
    

    正如 cmets 中提到的:由于 -a 包含 recurse,一个小错误就可以启动完整的目录树传输,因此更简单的方法可能是使用 @987654323 @,或将其替换为-lptgoD

    【讨论】:

    • 另外,如果您只发送一个文件,您可能需要添加“--progress”参数,以便您可以看到它的进度。
    • 这是否意味着您仍然需要 rsyncd.conf 中的模块在文件上方有一个目录(例如,使用拒绝选项删除),或者您可以通过指定其路径将文件上传到服务器上的任何位置?手册页对此并不十分清楚。
    • -a 包括递归,单个文件不需要它不确定我是否会将该标志用于单个文件,因为如果文件名意外成为目录,它可能会导致意外行为。跨度>
    • --partial --stats --progress
    【解决方案2】:

    基本语法

    rsync options source destination
    

    例子

    rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html
    

    Read more

    【讨论】:

      【解决方案3】:

      如果相对于源和目标的根目录,文件路径中的所有目录都已经存在,那么 Michael Place 的答案非常有效。

      但是如果你想用这个源路径同步文件怎么办:

      /source-root/a/b/file

      到具有以下目标路径的文件:

      /target-root/a/b/file

      并且目录 ab 不存在?

      您需要运行如下的 rsync 命令:

      rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]
      

      【讨论】:

      • 将单个文件复制到现有文件夹或提前创建文件夹不是更安全吗?在文件夹或文件夹内容同步的情况下,让我们 rsync 创建所有子文件夹,毕竟这是它的工作,但在这种特殊情况下,仅复制单个文件的 --include 参数太麻烦和棘手。
      • @user1598390 我不确定您假设或想象的情况是什么情况下安全性会降低,但是如果您尝试记住此命令的特定形式而您没有经常这样做,那么是的,它可能不如复制单个文件安全。如果文件很大,可能会更安全,即因为 rsync 会自动处理复制过程中可能发生的大多数错误。在某些情况下,我的语法对我特别有用,因为我编写的代码会以这种形式生成命令,因此,如果对相关代码进行了足够的测试,这些命令是“安全的”。
      【解决方案4】:

      迄今为止,其中两个答案并不完全正确,他们会得到多个文件,而另一个则不是那么简单,这是 IMO 的一个更简单的答案。

      以下内容只获取一个文件,但您必须使用 mkdir 创建 dest 目录。这可能是最快的选择:

      mkdir -p ./local/path/to/file
      rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/
      

      如果 /remote/path 中只有一个文件实例,如果您执行以下操作,rsync 可以为您创建目录。这可能会花费更多时间,因为它会搜索更多目录。此外,它还会为 /remote/path 中不在 ./local 中的目录创建空目录

      cd ./local
      rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .
      

      请记住 --include 和 --exclude 的顺序很重要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 2019-07-10
        相关资源
        最近更新 更多