Pregunta

No estoy seguro si esto es posible o no. Básicamente, estoy escribiendo un guión que me permite SCP un archivo a mi alojamiento. Esto es hasta ahora. Argumento 1 es el archivo y el argumento 2 es la carpeta que quiero que sea colocado en el servidor remoto:

function upload {
    scp $1 myusername@ssh.myhost.net:$2
}

Como se puede / no puede saber, si el directorio especifico cuando llamo a la función no existe, entonces la transferencia falla. ¿Hay una manera de comprobar si el directorio existe en la función y si no es así, crear.

Yo preferiría no tener que ssh en todo tiempo y crear el directorio, pero si tengo otra opción, entonces tengo otra opción.

¿Fue útil?

Solución

Puede utilizar rsync.

Por ejemplo,

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

Nota sobre rsync:

rsync es un software de utilidad y el protocolo de red para Unix que sincroniza los archivos y directorios de un lugar a otro y reducir al mínimo la transferencia de datos mediante el uso de codificación delta en su caso utilizando el algoritmo rsync que es más rápido que otras herramientas.

Otros consejos

Asumo que decir que no desea iniciar sesión de forma interactiva y crear directorios a mano, en lugar de que desea evitar el uso de ssh por completo, ya que todavía necesita una contraseña o clave pública con scp.

Si se utiliza ssh no interactiva es aceptable, entonces se puede transmitir su archivo usando cat sobre ssh:

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

donde

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

Si el directorio ya existe, mkdir se queja, pero aún así el archivo se copia. El directorio existente no se sobrescribe. Si no existe el directorio, mkdir lo creará.

Si lo hace un SCP recursiva (-r), copiará directorios también. Así que si se crea un directorio del nombre que desee en el host remoto a nivel local, copiar el archivo en él, y luego copiar de forma recursiva, el directorio se creará, con el archivo en él.

Un poco torpe, pero sería hacer el trabajo.

Este es un proceso de dos pasos

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

Se crea Esto asegura estructura de directorios. A continuación, se copia

scp $1 myusername@ssh.myhost.net:$2

¿Qué tal, por ejemplo, España ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir

sshfs ser de lujo!

Ejemplo .ssh/config

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

Configuración local a un lado desde arriba sólo requiere un target punto de montaje ...

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

... después de lo cual las cosas como el montaje y des-montaje son mucho más simple de la escritura.

Monte

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

Desactivar

fusermount -u /media/your-host

La mejor parte de este enfoque, cuando un servidor lo permite, es que los scripts se ejecutan localmente pueden interactuar con el sistema de archivos remoto. Lo que significa que cosas como ...

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

... a ser posible entre muchos otros trucos que pueden ser preformados a través de este tipo de magia de montaje.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top