Bash 如何结合find、ssh和rsync按时间戳传输文件

Bash 如何结合find、ssh和rsync按时间戳传输文件,bash,ssh,find,rsync,Bash,Ssh,Find,Rsync,我想将过去24小时的文件从远程服务器自动传输到本地服务器(都是GNU linux)。我一直在分别尝试使用find和rsync命令(和ssh),现在我只能: 1-使用“查找和ssh”获取远程服务器上/FilesInRemoteServer/目录中最近24小时的文件列表 2-使用rsync和ssh成功地将文件从远程服务器传输到本地服务器 我现在的问题是我不能将find、ssh和rsync组合起来。我的意思是,我不能将find给出的过去24小时的文件的输出组合在一起,以便rsync获取这些文件 要从s

我想将过去24小时的文件从远程服务器自动传输到本地服务器(都是GNU linux)。我一直在分别尝试使用
find
rsync
命令(和
ssh
),现在我只能:

1-使用“查找和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\\0'
(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\\0' |
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\\0' | 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
需要一个参数。它在您的第一个命令中获得一个:

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\\0' |
rsync --archive --verbose --compress --human-readable --files-from=- --from0 \
    --rsh=ssh root@192.168.X.X:/FilesInRemoteServer/ \
    "/DestinationInLocalServer/"

我不明白为什么您的rsync行包含“
ssh
”。。。还可以看看这个Unix StackExchange。嗨,Amessichel,我在rsync中包含了ssh,以在传输时添加加密安全性。感谢您发布这个问题。这个方法比我以前做的更干净!我正在尝试以下命令ssh-I digital.pemubuntu@SERVER_IP'find/home/user/import_live/content/*-mtime-5-键入f-name.xml“-printf%P\\0”| rsync-rtuzv-e'ssh-i digital.pem'-文件from=---from0ubuntu@SERVER_IP:/home/user/import\u live/content//home/user/test/我遇到了如下错误。rsync错误:options.c(2308)[server=3.1.1]rsync:connection意外关闭(到目前为止接收到0字节)[Receiver]rsync错误:io.c(226)[Receiver=3.1.1]的rsync协议数据流(代码12)中的错误您的最终命令有点不正确
--rsh=ssh
应该设置远程shell命令,并且
root@192...
是源代码。正如您所写的,远程shell命令由ssh和一个无效参数组成,
“/Destination…
是源,没有目标。请注意,
--files from
没有指定源,它只提供源位置的文件列表。谢谢,删除了伪引号!嗨,miken32,谢谢你的回答。星期一我会试试你的建议,希望能奏效。你好,miken32,谢谢你的帮助。我试过了,但被拒绝了。请参阅我的原始帖子中的更新部分。是的,当然,如果您的远程服务器上没有设置公钥身份验证,您仍然会收到输入密码的提示。
ssh root@192.168.X.X 'find /FilesInRemoteServer/ -mtime -1 -type f -printf %P\\0' |
rsync --archive --verbose --compress --human-readable --files-from=- --from0 \
    --rsh=ssh root@192.168.X.X:/FilesInRemoteServer/ \
    "/DestinationInLocalServer/"