50 votes

Utilisation de caractères génériques dans les commandes avec zsh

En utilisant des commandes telles que rsync y scp avec ZSH J'ai eu des problèmes. Au lieu de me donner tous les fichiers correspondants (ce qui est normal), il ne s'exécute pas et renvoie le message suivant :

  ~  rsync -azP user@server:~/* ~/
zsh: no matches found: user@server:~/*

Comment puis-je résoudre ce problème ?

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

64voto

Don Zalmrol Points 1

Ceci est lié à la manière dont ZSH gère les caractères globaux pour générer les noms de fichiers. Par défaut, ZSH génère les noms de fichiers et lance une erreur avant d'exécuter la commande s'il ne trouve aucune correspondance.

Il existe de nombreuses façons de contourner ce comportement, en voici quelques-unes :

  • Le plus rapide est de mettre les caractères de globalisation entre guillemets.

    $ rsync -azP "user@server:~/*" ~/

  • Pour une modification permanente, vous devrez ajouter ce qui suit dans votre .zshrc fichier :

    unsetopt nomatch

Cela empêchera ZSH d'afficher une erreur lorsqu'aucune correspondance ne peut être trouvée.

  • Une autre possibilité consiste à désactiver la globalisation pour une commande particulière en utilisant la commande noglob modificateur de commande. En définissant un alias dans .zshrc par exemple :

    alias scp='noglob scp'

9voto

superuseroi Points 261

J'utilise zpretzo depuis plusieurs mois et j'ai également rencontré ce problème. J'ai trouvé une solution astucieuse et utile si vous ne voulez pas faire de changements : il suffit de faire précéder la commande d'une barre oblique inverse.

~/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 cela vous aidera !

6voto

Francisco Points 1718

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)'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X