How do I create a directory on remote host if it doesn't exist without ssh-ing in?

后端 未结 6 1972
南笙
南笙 2021-02-01 00:57

I\'m not sure if this is possible or not. Basically, I\'m writing a script that allows me to scp a file to my hosting. This is it so far. Argument 1 is the file and argument 2 i

相关标签:
6条回答
  • 2021-02-01 01:18

    This is a two step process

    ssh myusername@ssh.myhost.net "mkdir -p $2"
    

    This ensures directory structure is created. Then, you copy

    scp $1 myusername@ssh.myhost.net:$2
    
    0 讨论(0)
  • 2021-02-01 01:33

    If you do a recursive scp (-r), it will copy directories as well. So if you create a directory of the name you desire on the remote host locally, copy the file into it, and then recursively copy, the directory will be created, with the file in it.

    Kind of awkward, but it would do the job.

    0 讨论(0)
  • 2021-02-01 01:35

    You can use rsync.

    For example,

    rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO
    

    Note about rsync:

    rsync is utility software and network protocol for Unix which synchronizes files and directories from one location to another. It minimizes data transfer sizes by using delta encoding when appropriate using the rsync algorithm which is faster than other tools.

    0 讨论(0)
  • 2021-02-01 01:36

    I assume you mean you don't want to interactively log in and create directories by hand, rather than that you want to avoid using ssh altogether, since you still need a password or public key with scp.

    If using ssh non-interactively is acceptable, then you can stream your file using cat over ssh:

    cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"
    

    where

    $1 = filename 
    $2 = user@server
    $3 = dir_on_server
    

    If the directory already exists, mkdir complains but the file is still copied over. The existing directory will not be overwritten. If the directory does not exist, mkdir will create it.

    0 讨论(0)
  • 2021-02-01 01:43

    How about, for example,
    ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir

    0 讨论(0)
  • 2021-02-01 01:46

    sshfs be fancy!

    Example .ssh/config

    Host your-host
      HostHame example.com
      User name
      IdentitiesOnly yes
      IdentityFile ~/.ssh/private_key
    

    Local setup aside from above only requires a target mount point...

    sudo mkdir /media/your-host
    sudo chown ${USER}:${USER} /media/your-host
    

    ... after which things like mounting and un-mounting are far simpler to script.

    Mount

    sshfs your-host:within-home/some-dir /media/your-host
    

    Unmount

    fusermount -u /media/your-host
    

    Best part about this approach, when a server allows it, is that locally running scripts can interact with the remote file system. Meaning that things like...

    if ! [ -d "/media/your-host/nowhere" ]; then
      mkdir -vp "/media/your-host/nowhere"
    fi
    

    ... become possible among many other tricks that can be preformed via such mounting magics.

    0 讨论(0)
提交回复
热议问题