scp -r… mais omettez (excluez) un sous-répertoire spécifié

29

Voici la structure du répertoire:

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

Je veux tout copier, SAUF pour le sous-répertoire / a / c /.

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

Q: Comment pourrais-je spécifier un répertoire à supprimer dans la commande scp?

russian_spy
la source
3
La motivation d'origine est que le sous-répertoire "/ a / c /" est très volumineux (gigaoctets), donc le laisser réduire la copie de quelques minutes à quelques secondes.
russian_spy

Réponses:

28

Je ne pense pas que vous puissiez, mais vous pourriez utiliser rsync? Quelque chose comme ça:

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

Je pense que cela pourrait être la bonne façon de le faire, donc vous utilisez toujours SSH, je n'ai pas trouvé de moyen de le faire avec scp - mais l'utilisation de rsync sur ssh pourrait le résoudre.

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

Si vous utilisez le commutateur -n, il créera une exécution à sec du processus:

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

la source
Essayez aussi -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc
1

Vous pouvez utiliser la globalisation étendue comme dans l'exemple ci-dessous:

#Enable extglob
shopt -s extglob

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

Ce n'est pas le moyen idéal de le faire, mais définissez le sous-répertoire que vous souhaitez exclure en lecture seule. chmod -R 444 /a/cdevrait faire l'affaire. Vous obtiendrez une erreur "permission refusée" lorsqu'il essaiera d'écraser ce répertoire.

sjobe
la source