我不确定这是否可行.基本上,我正在编写一个脚本,允许我将文件scp到我的主机.到目前为止这是它.参数1是文件,参数2是我希望它放在远程服务器上的文件夹:
function upload { scp $1 myusername@ssh.myhost.net:$2 }
您可能/可能不知道,如果我在调用函数时指定的目录不存在,则传输失败.有没有办法检查函数中是否存在该目录,如果没有,则创建它.
我宁愿不必每次都使用ssh并创建目录,但如果我别无选择,那么我别无选择.
您可以使用rsync.
例如,
rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO
关于rsync的注意事项:
rsync是Unix的实用程序软件和网络协议,它将文件和目录从一个位置同步到另一个位置,同时在适当时使用delta编码最小化数据传输,使用比其他工具更快的rsync算法.
我假设你的意思是你不想交互式登录并手动创建目录,而不是你想要ssh
完全避免使用,因为你仍然需要密码或公钥scp
.
如果使用ssh非交互方式是可以接受的,那么你可以使用流文件cat
在ssh
:
cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"
哪里
$1 = filename $2 = user@server $3 = dir_on_server
如果该目录已存在,mkdir
则会抱怨,但文件仍会被复制.现有目录不会被覆盖.如果目录不存在,mkdir
将创建它.
如果你做一个递归的scp(-r),它也会复制目录.因此,如果您在本地远程主机上创建所需名称的目录,将文件复制到其中,然后递归复制,将创建目录,其中包含文件.
有点尴尬,但它会做的工作.
这是一个两步过程
ssh myusername@ssh.myhost.net "mkdir -p $2"
这可确保创建目录结构.然后,你复制
scp $1 myusername@ssh.myhost.net:$2
例如,怎么样
ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir