J'essaie de copier tous les fichiers qui ne commencent pas par la lettre "a", en ksh.
La copie de la machine source vers la machine de destination fonctionne correctement :
scp -p !(a*) user@machine:/path/directory/.
Mais, si je suis sur le serveur de destination et que je souhaite copier à partir du serveur source, échoue:
scp -p user@machine:/path/!(a*) .
Des idées?
Ce que j'ai trouvé, c'est que sur les anciennes machines HP-UX (parisc 11.11), je devais utiliser [^ a] * Mais, sur les machines plus récentes (parisc 11.31 et plus récentes), cela fonctionne! (A *)
C'est ce avec quoi je me suis retrouvé. Et il fonctionne:
la source
Les noms distants passés à
scp
sont en fait interprétés comme une liste de motifs séparés par des espaces du côté distant. C'est souvent une gêne lorsque vous essayez de copier un fichier dont le nom contient des espaces, mais ici c'est utile:scp -p 'user@machine:/path/a*' .
copierait tous les fichiers dont le nom commence para
.Votre commande fonctionnera si vous citez le modèle afin qu'il soit interprété à distance plutôt que localement, à condition de franchir un autre obstacle. Le modèle
!(a*)
n'est pas un modèle de shell de base, c'est une extension ksh (que bash et zsh prennent également en charge si vous définissez l'option appropriée). Donc , cela ne fonctionnera que si votre shell distant est ksh, pas si elle est une autre shell et vousexec ksh
de.profile
ou quelque chose de similaire.Le moyen le plus simple, à moins que vous ne soyez dans une sorte d'environnement restreint ou antique, est d'oublier
scp
. Vous souhaitez que les fichiers distants fonctionnent comme les fichiers locaux, alors faites-en des fichiers locaux: montez le répertoire distant avec sshfs . Cela nécessite FUSE sur la machine locale et un serveur SFTP (c'est-à-dire unsftp-server
exécutable qui sesshd
lance) sur la machine distante.la source