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?


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 .

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 .

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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.