如何结合find,ssh和rsync通过时间戳传输文件

我想自动将最近24小时的文件从远程服务器传输到本地服务器(都是GNU linux)。 我一直在尝试很多与findrsync命令(和ssh )分开,现在我只能够:

1-)使用“find and ssh”获取远程服务器上目录/FilesInRemoteServer/中最近24小时文件的列表

2-)使用rsyncssh从远程到本地服务器成功传输文件

我现在的问题是我无法将findsshrsync结合起来。 我的意思是我不能合并find给出的最后24小时文件的输出,以便rsync获取我想从stdin传输的文件列表。

这是我迄今为止所做的:

(1) sshfind命令(在本地服务器中发送的命令)通过sshfind组合,我可以获得最近24小时的文件列表:

ssh root@192.168.X.X 'find /FilesInRemoteServer/ -mtime -1 -type f -printf %P'

(2) rsync和ssh命令(在本地服务器中发送命令)使用“rsync”和“ssh”组合我可以通过以下方式从远程服务器复制到本地服务器从目录“/ FilesInRemoteServer”中的文件:

rsync -avzhe ssh root@192.168.X.X:/FilesInRemoteServer/ "/DestinationInLocalServer/"

但是,当我试图结合这两个命令(1和2)不起作用,并得到这个错误:

ssh root@192.168.X.X 'find /FilesInRemoteServer/ -mtime -1 -type f -printf %P' |
rsync -avzhe --files-from=- -0 ssh root@192.168.X.X:/FilesInRemoteServer/ 
      "/DestinationInLocalServer/" 
Unexpected remote arg: root@192.168.X.X:/FilesInRemoteServer/
rsync error: syntax or usage error (code 1) at main.c(1330) [sender=3.1.1]
root@192.168.X.X's password:

谢谢你的帮助。

#更新:

你好,当我单独尝试两个命令时,它们都能正常工作,但是如果我像你一样测试,它会提示3次SSH密码,并且我会在下面得到权限被拒绝和错误。

$ ssh root@192.168.X.X 'find /FilesInRemoteServer/ -mtime -1 -type f -printf %P' | rsync --archive --verbose --compress --human-readable --files-from=- --from0 --rsh=ssh root@192.168.X.X:/FilesInRemoteServer/ /DestinationInLocalServer/
root@192.168.X.X's password: root@192.168.X.X's password:

Permission denied, please try again.
root@192.168.X.X's password: Permission denied, please try again.
root@192.168.X.X's password:

Permission denied, please try again.
root@192.168.X.X's password: Permission denied, please try again.
root@192.168.X.X's password:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

在使用实用程序之前,您应该了解您提供的所有选项都可以做什么。 就你而言,你正在使用-e选项。 手册页有什么要说的呢?

  -e, --rsh=COMMAND
          This option allows you to choose an alternative remote shell program to use for communication between the  local
          and  remote copies of rsync. Typically, rsync is configured to use ssh by default, but you may prefer to use rsh
          on a local network.

          If this option is used with [user@]host::module/path, then the remote shell COMMAND will be used to run an rsync
          daemon  on  the  remote host, and all data will be transmitted through that remote shell connection, rather than
          through a direct socket connection to a running rsync daemon on the remote host.  See the section "USING  RSYNC-
          DAEMON FEATURES VIA A REMOTE-SHELL CONNECTION" above.

所以, -e正在期待一个论点。 它在你的第一个命令中得到一个:

rsync -avzhe ssh root@192.168.X.X:/FilesInRemoteServer/ "/DestinationInLocalServer/"

但在你的第二个,你决定不给它一个论点:

rsync -avzhe --files-from=- -0 ssh root@192.168.X.X:/FilesInRemoteServer/ 
  "/DestinationInLocalServer/"

我确定如果你正确地调用它,它会再次开始工作。 我发现使用长版本的选项是记住他们在做什么的好方法:

ssh root@192.168.X.X 'find /FilesInRemoteServer/ -mtime -1 -type f -printf %P' |
rsync --archive --verbose --compress --human-readable --files-from=- --from0 
    --rsh=ssh root@192.168.X.X:/FilesInRemoteServer/ 
    "/DestinationInLocalServer/"
链接地址: http://www.djcxy.com/p/60051.html

上一篇: How to combine find, ssh and rsync to transfer files by timestamp

下一篇: usage of rsync without typing password