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:
-
Antes
rsync
2.6.0 (1 de enero de 2004), requería la-e ssh
bandera para que se comporte comoscp
porque por defecto usaba el obsoleto protocolo RSH. -
scp
yrsync
comparten algunas banderas, pero solo hay un poco de superposición. -
Cuando usas
SSH
como el protocolo de transferencia,rsync
utiliza los mismos valores predeterminados. Entonces, al igual quescp
, 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.