我需要在从远程服务器到我的电脑的一系列日期之间复制一些文件。当有多个文件符合日期条件时,我遇到了问题,因为在这种情况下,我的脚本只设法复制第一个文件并为其他文件输出以下错误:
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正在添加一些我必须使用的字符或其他东西。
关于发生了什么以及如何解决(或任何其他方式)的任何想法?提前感谢
答案 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