scp -r ... pero omite (excluye) un subdirectorio especificado

29

Aquí está la estructura del directorio:

/a/
/a/b/
/a/c/

Quiero copiar todo, EXCEPTO para el subdirectorio / a / c /.

scp -rp myserver:/a .      # this will copy everything

P: ¿Cómo especificaría un directorio para dejar de lado en el comando scp?

russian_spy
fuente
3
La motivación original es que el subdirectorio "/ a / c /" es muy grande (gigabytes), por lo que dejarlo fuera reducirá la copia de minutos a segundos.
russian_spy

Respuestas:

28

No creo que puedas, pero ¿podrías usar rsync? Algo como esto:

rsync -a --exclude=a/c myserver:/a .
Paul Dixon
fuente
5

Creo que esta podría ser la forma correcta de hacerlo, por lo que todavía está usando SSH, no he encontrado una manera de hacerlo con scp, pero usar rsync sobre ssh podría resolverlo.

rsync -e 'ssh -ax' -av --exclude /a/c myserver:/a .

Si usa el modificador -n, creará una ejecución en seco del proceso:

 rsync -e 'ssh -ax' -av --exclude /a/c -n myserver:/a .

fuente
Proveedores -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc
1

Puede usar globbing extendido como en el siguiente ejemplo:

#Enable extglob
shopt -s extglob

cp -rv !(./excludeme/*.jpg) /var/destination
WackGet
fuente
0

No es la forma perfecta de hacerlo, pero configure el subdirectorio que desea excluir como de solo lectura. chmod -R 444 /a/cdebería hacer el truco. Obtendrá un error de "permiso denegado" cuando intente escribir sobre ese directorio.

sjobe
fuente