En utilisant des commandes telles que rsync
et scp
avec ZSH
, j'ai rencontré des problèmes. Au lieu du comportement (normal) de me donner tous les fichiers correspondants, il ne s'exécutera pas et retournera:
➜ ~ rsync -azP user@server:~/* ~/
zsh: no matches found: user@server:~/*
Comment puis-je réparer cela?
Mon .zshrc
ZSH=$HOME/.oh-my-zsh
ZSH_THEME="robbyrussell"
plugins=(git brew)
source $ZSH/oh-my-zsh.sh
export PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/sbin
Ceci est lié à la façon dont ZSH gère les caractères de remplacement pour générer des noms de fichiers. Par défaut, ZSH générera les noms de fichiers et émettra une erreur avant d'exécuter la commande si aucune correspondance n'est trouvée.
Il existe de nombreuses façons de contourner ce comportement, en voici quelques unes:
$ rsync -azP "user@server:~/*" ~/
.zshrc
:unsetopt nomatch
Cela empêchera ZSH d’imprimer une erreur si aucune correspondance n’est trouvée.
noglob
. En définissant un alias dans .zshrc
par exemple:alias scp='noglob scp'
J'utilise zpretzo depuis quelques mois et j'ai également rencontré ce problème. Je suis tombé sur une solution soignée et utile si vous ne souhaitez apporter aucune modification: il vous suffit de faire précéder la barre oblique inverse de la commande.
~/p/b/a/files ❯❯❯ scp *.* myserver@Host:~/
*.*: No such file or directory
~/p/b/a/files ❯❯❯ \scp *.* myserver@Host:~/
jquery.min.js 100% 93KB 92.6KB/s 00:00
json2.min.js 100% 3377 3.3KB/s 00:00
J'espère que ça aide!
Cela résout votre problème sans avoir à citer manuellement les URL.
autoload -U url-quote-magic
zle -N self-insert url-quote-magic
# sort it out for SCP
some_remote_commands=(scp rsync)
zstyle -e :urlglobber url-other-schema \
'[[ $some_remote_commands[(i)$words[1]] -le ${#some_remote_commands} ]] && reply=("*") || reply=(http https ftp)'