J'ai besoin de copier tous les fichiers .class du serveur vers le local avec tous les répertoires réservés. par exemple server:/usr/some/unknown/number/of/sub/folders/me.class
, /usr/project/backup/some/unknown/number/of/sub/folders/me.class
le problème est qu'il existe de nombreux autres fichiers inutiles tels que les fichiers .svn-base que je ne veux pas. comment puis-je les filtrer pour ne que les scp
fichiers .class?
99
Réponses:
Je recommanderais probablement d'utiliser quelque chose comme
rsync
pour cela en raison de ses indicateursinclude
etexclude
, par exemple: -Quelques autres indicateurs utiles:
-r
pour récursif-a
pour l'archive (principalement tous les fichiers)-v
pour une sortie verbeuse-e
pour spécifier ssh au lieu de la valeur par défaut (qui devrait être ssh, en fait)la source
-a
inclut déjà-r
selon les pages de manuel rsync.--prune-empty-dirs
supprimera les répertoires vides.Pour exclure les fichiers dot dans le répertoire de base:
[!.]*
est un shell glob qui s'étend à tous les fichiers du répertoire de travail ne commençant pas par un point.la source
scp -r [\!.]* server:/path/to/something
Il n'y a pas de fonctionnalité dans scp pour filtrer les fichiers. Pour des trucs "avancés" comme celui-ci, je recommande d'utiliser rsync:
(cette ligne copie rsync du dossier distant vers le dossier actuel)
Les versions récentes du tunnel rsync via une connexion ssh automatiquement par défaut.
la source
Puisque vous pouvez,
scp
vous devriez être d'accordssh
,soit écrire ce qui suit, soit vous connecter et exécuter ...
revenir (déconnexion) au serveur local et
scp
,Si vous trouvez que
$(find ...)
c'est trop long pour votre changement de goudron,Enfin, puisque vous le gardez
/usr/project/backup/
,pourquoi s'embêter à l'extraction? Gardez simplement le
tar.bz2
, avec peut-être un horodatage.la source
rsync
et de l'ssh
installer sur le système d'exploitation. Au lieu de cela, c'était une solution de contournement intelligente. Merci!Commande ci-dessous pour les fichiers.
scp `trouver. -maxdepth 1 -nom "* .log" \! -nom "hs_err_pid2801.log" -type f` root @ IP: / tmp / test /
Commande ci-dessous pour le répertoire.
scp -r `trouver. -maxdepth 1 -nom "lo *" \! -name "localhost" -type d` root @ IP: / tmp / test /
vous pouvez personnaliser la commande ci-dessus selon vos besoins.
la source
Avec l'authentification basée sur la clé ssh activée, le script suivant fonctionnerait.
la source
Si vous voulez vraiment utiliser scp, il existe un moyen indirect. Dites que nous voulons copier tous les fichiers .jpg du dossier local '/ src' dans le dossier '/ dst' du serveur distant 10.1.1.2:
la source
la source
Copiez votre dossier source dans
somedir
:cp -r
srcdir
somedir
Supprimez tous les fichiers inutiles:
trouver somedir -name '.svn' -exec rm -rf {} \ +
lancer scp depuis
somedir
la source
tar
ouzip
-file. Au lieu de cela, il n'y a pas de compression (scp fait la compression) et le code «packagé» est copié.