SCP +从远程到本地查找

时间:2016-02-09 14:56:44

标签: ssh scp

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

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正在添加一些我必须使用的字符或其他东西。

关于发生了什么以及如何解决(或任何其他方式)的任何想法?提前感谢

2 个答案:

答案 0 :(得分:1)

其他可能的选择是使用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

答案 1 :(得分:0)

我终于设法做了一招:

我写了以下内容" 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