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