Usando curingas em comandos com zsh

32

Usando comandos como rsync e scp com ZSH tive problemas. Em vez do comportamento (normal) de me fornecer todos os arquivos correspondentes, ele não será executado e retornará:

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

Como posso corrigir isso?

Meu .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
    
por Morgan 17.04.2013 / 22:50

3 respostas

44

Isso está relacionado a como o ZSH gerencia os caracteres globbing para gerar nomes de arquivos. Por padrão, o ZSH gerará os nomes de arquivos e lançará um erro antes de executar o comando se não encontrar correspondências.

Existem muitas maneiras de contornar esse comportamento, eis algumas delas:

  • O mais rápido é colocar os caracteres globbing entre aspas.
$ rsync -azP "user@server:~/*" ~/
  • Para uma alteração permanente, você precisará adicionar o seguinte no arquivo .zshrc :
unsetopt nomatch

Isso impedirá que o ZSH imprima um erro quando nenhuma correspondência puder ser encontrada.

  • Outra possibilidade é desativar o globbing de um comando em particular usando o modificador de comando noglob . Definindo um alias em .zshrc , por exemplo:
alias scp='noglob scp'
    
por 17.04.2013 / 23:07
5

Eu tenho usado o zpretzo por alguns meses e também experimentei esse problema. Eu me deparei com uma solução útil e útil se você não quiser fazer nenhuma alteração: basta adicionar uma barra invertida ao comando.

~/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

Espero que isso ajude!

    
por 11.04.2014 / 21:39
2

Isso resolve seu problema sem precisar citar manualmente os URLs

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)'
    
por 18.04.2013 / 11:40