SCP+FIND 从远程到本地

SCP+FIND from remote to local

我需要在一定日期范围内将一些文件从远程服务器复制到我的电脑。当有多个文件符合日期条件时,我遇到了问题,因为在这种情况下,我的脚本只能设法复制第一个文件并为其他文件输出以下错误:

cp: cannot `stat' «/path/to/find/filematching»: No such file or directory

我的脚本是:

ssh myuser@remoteserver touch --date \'"`date +"%d %b %Y 06:00"`"\' start
ssh myuser@remoteserver touch --date \'"`date +"%d %b %Y %H:%M"`"\' end
scp myuser@remoteserver:`ssh myuser@remoteserver find /path/to/find/ -type f -newer start -not -newer end` /path/to/copy/
ssh myuser@remoteserver rm start
ssh myuser@remoteserver rm end

我首先想到问题可能是 find 提供了 scp 无法管理的格式的文件列表,但是,如果我先通过 ssh 连接到服务器,然后在远程机器上使用 find 执行 scp 它就可以工作很好(我不能使用这个选项,因为我的脚本必须自动执行),所以我猜 ssh 正在添加一些我必须转义的字符或其他东西。

关于正在发生的事情以及如何解决它(或任何其他方法)的任何想法?提前致谢

我终于成功了:

下面是我写的"myscript.sh"

touch --date "`date +"%d %b %Y 06:00"`" start
touch --date "`date +"%d %b %Y %H:%M"`" end
scp `find /path/to/find/ -type f -newer start -not -newer end` myuser@localserver:/path/to/copy/
rm start
rm end

然后我在远程服务器上运行myscript.sh:

ssh myuser@remoteserver 'bash -s' < myscript.sh

其他可能的选择是使用 for 循环:

ssh myuser@remoteserver touch --date \'"`date +"%d %b %Y 06:00"`"\' start
ssh myuser@remoteserver touch --date \'"`date +"%d %b %Y %H:%M"`"\' end

for i in `ssh myuser@remoteserver find /path/to/find/ -type f -newer start -not -newer end`;
do 
    scp myuser@remoteserver:$i /path/to/copy/
done

ssh myuser@remoteserver rm start
ssh myuser@remoteserver rm end