Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将url传递给bash脚本以在scp中使用_Bash_Ssh_Scp - Fatal编程技术网

将url传递给bash脚本以在scp中使用

将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

我正在写一个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 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和路径。