Saltar al contenido

¿Puede scp crear un directorio si no existe?

Si encuentras algún detalle que no comprendes puedes dejarlo en la sección de comentarios y trataremos de ayudarte tan rápido como podamos.

Esta es una de las muchas cosas que rsync puede hacer.

Si está utilizando una versión de rsync lanzado en los últimos años,¹ su sintaxis de comando básica es similar a scp

$ rsync -r local-dir remote-machine:path

eso copiará local-source y su contenido para $HOME/path/local-dir en la máquina remota, creando los directorios necesarios.³

rsync tiene algunas restricciones aquí que pueden afectar si esto funcionará en su situación particular. No creará múltiples niveles de directorios remotos faltantes, por ejemplo; solo creará hasta un nivel faltante en el control remoto. Puede sortear esto fácilmente precediendo al rsync comando con algo como esto:

$ ssh remote-host 'mkdir -p foo/bar/qux'

Eso creará el $HOME/foo/bar/qux árbol si no existe. No se quejará ni hará nada malo si lo hace ya existe.

rsync a veces tiene otros comportamientos sorprendentes. Básicamente, le estás pidiendo que descubra lo que querías copiar, y es posible que sus conjeturas no coincidan con tus suposiciones. Pruébalo y verás. Si no se comporta como espera y no puede ver por qué, publique más detalles sobre las configuraciones de su directorio local y remoto, y dé el comando que probó.


notas al pie:

  1. Antes rsync 2.6.0 (1 de enero de 2004), requería la -e ssh bandera para que se comporte como scp porque por defecto usaba el obsoleto protocolo RSH.

  2. scp y rsync comparten algunas banderas, pero solo hay un poco de superposición.

  3. Cuando usas SSH como el protocolo de transferencia, rsync utiliza los mismos valores predeterminados. Entonces, al igual que scp, asumirá que hay un usuario con el mismo nombre que su usuario local en la máquina remota de forma predeterminada.

Si está copiando un grupo de archivos, en realidad no. Si está copiando un directorio y todo el contenido debajo de él, sí. Dado este comando:

$ scp -pr /source/directory [email protected]:the/target/directory

Si directory no existe en ~/the/target sobre host, se creará. Si acaso, ~the/target no existe, es probable que tenga problemas; no recuerdo los resultados exactos de este caso, pero prepárese para lo previsto scp fallar

Por lo que sé, scp por sí mismo no puede hacer eso, no. Sin embargo, podría simplemente ssh a la máquina de destino, cree el directorio y luego cópielo. Algo como:

ssh [email protected] "mkdir -p /target/path/" &&
    scp /path/to/source [email protected]:/target/path/

Tenga en cuenta que si está copiando directorios completos, lo anterior no es necesario. Por ejemplo, para copiar el directorio ~/foo al host remoto, puede usar el -r bandera (recursiva):

scp -r ~/foo/ [email protected]:~/

Eso creará el directorio de destino. ~/foo en el host remoto. Sin embargo, no puede crear el directorio principal. scp ~/foo [email protected]:~/bar/foo fallará a menos que el directorio de destino bar existe En cualquier caso, el -r flag no ayudará a crear un directorio de destino si está copiando archivos individuales.

No se te olvide difundir esta noticia si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *