将url传递给bash脚本以在scp中使用
我正在写一个cron来备份服务器上的一些东西。 基本上,我使用scp从本地目录发送特定文件。 我使用公钥来避免身份验证 为了重用,我通过参数将本地目录和服务器url传递给我的bash脚本 如何设置参数:将url传递给bash脚本以在scp中使用,bash,ssh,scp,Bash,Ssh,Scp,我正在写一个cron来备份服务器上的一些东西。 基本上,我使用scp从本地目录发送特定文件。 我使用公钥来避免身份验证 为了重用,我通过参数将本地目录和服务器url传递给我的bash脚本 如何设置参数: #!/bin/bash DIR="$1" URL="$2" FILES="$DIR*.ext" 我的问题是如何格式化url 无格式 如何将文件发送到服务器: #!/bin/bash for F in $FILEs do scp $F $URL; if ssh $URL s
#!/bin/bash
DIR="$1"
URL="$2"
FILES="$DIR*.ext"
我的问题是如何格式化url
无格式
如何将文件发送到服务器:
#!/bin/bash
for F in $FILEs
do
scp $F $URL;
if ssh $URL stat $(basename "$F")
then
rm $F
else
echo "Fails to copy $F to $URL"
fi
done
如果我尝试在服务器上的用户家中进行复制,我会:
$ ~/backup /path/to/local/folder/ user@server.com:
$ ~/backup /path/to/local/folder/ user@server.com:/path/to/remote/folder/
如果我尝试在服务器上的特定目录中复制,我会:
$ ~/backup /path/to/local/folder/ user@server.com:
$ ~/backup /path/to/local/folder/ user@server.com:/path/to/remote/folder/
在所有情况下,它都会给出众所周知的错误(以及我的自定义回显):
无论如何它都可以工作(文件被复制)。但这不是一个解决方案,因为当scp失败时(似乎如此),文件永远不会被删除
带格式
我尝试使用以下方法发送文件:
#!/bin/bash
for F in $FILES
do
scp $F "$URL:"
done
我不再收到错误,它可以在用户的主目录中进行复制,然后删除本地文件:
$ ~/backup /path/to/local/folder/ user@server.com
但是,当然,发送到特定目录根本不起作用
最后
所以我认为我的第一种方法更合适,但是我如何才能消除这个错误呢?你的错误是你可以
scp
到user@server.com:
但不是ssh
:您需要删除尾随的:
字符(以及后面可能的路径)。通过bash
参数扩展,您可以很容易地做到这一点:
建议
- “使用更多的引语!”它们是至关重要的。另外,学习“和”和“之间的区别。请参见和
- 如果文件名中有空格,则代码将分解。最好使用
而IFS=read-r line;do#stuff$line;done
- 看
ssh stat
。我意识到如果我想在特定的远程目录上执行ssh stat
,我必须使用语法sshuser@server.comstat/path/to/remote/directory/
。因为我的目标是能够捕获基本url“user@server.com“和特定目录”user@server.com:/remote/path“如果没有测试和字符串操作,我将无法执行此操作,因此我将分别传递服务器url和路径。