如何结合find,ssh和rsync通过时间戳传输文件
我想自动将最近24小时的文件从远程服务器传输到本地服务器(都是GNU linux)。 我一直在尝试很多与find
和rsync
命令(和ssh
)分开,现在我只能够:
1-)使用“find and ssh”获取远程服务器上目录/FilesInRemoteServer/
中最近24小时文件的列表
2-)使用rsync
和ssh
从远程到本地服务器成功传输文件
我现在的问题是我无法将find
, ssh
和rsync
结合起来。 我的意思是我不能合并find
给出的最后24小时文件的输出,以便rsync
获取我想从stdin
传输的文件列表。
这是我迄今为止所做的:
(1) ssh
和find
命令(在本地服务器中发送的命令)通过ssh
和find
组合,我可以获得最近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