zsh 명령에서 와일드 카드 사용


39

같은 명령을 사용 rsync하고 scpZSH내가 문제로 실행했습니다. 일치하는 모든 파일을 제공하는 (정상적인) 동작 대신 실행되지 않고 다음을 반환합니다.

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

이 문제를 어떻게 해결할 수 있습니까?

나의 .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

답변:


50

이것은 ZSH가 글 로빙 문자를 관리하여 파일 이름을 생성하는 방법과 관련이 있습니다. 기본적으로 ZSH는 파일 이름을 생성하고 일치하는 것이 없으면 명령을 실행하기 전에 오류를 발생시킵니다.

이 동작을 우회하는 방법은 여러 가지가 있습니다. 다음은 그 중 일부입니다.

  • 가장 빠른 방법은 글 로빙 문자를 따옴표로 묶는 것입니다.
$ rsync -azP "user@server:~/*" ~/
  • 영구적으로 변경하려면 .zshrc파일에 다음을 추가해야 합니다.
unsetopt nomatch

이렇게하면 일치하는 항목을 찾을 수 없을 때 ZSH가 오류를 인쇄하지 않습니다.

  • 또 다른 가능성은 noglob명령 수정자를 사용하여 특정 명령에 대한 글 로빙을 비활성화하는 것 입니다. .zshrc예를 들어 별칭을 설정하면
alias scp='noglob scp'

감사! 와 관련이 없었습니다 bash.
Morgan

@Morgan 사실 이상합니다. 따옴표가 없으면 Bash는 물결표를보기 전에 확장해야 rsync합니다. 두 서버의 홈 디렉토리에 동일한 경로를 사용하고 있었습니까?
slhck

@slhck 아니, 맞아. zsh에는 와일드 카드를 구성하기위한 옵션이 더 있으므로 zshrc에서이 동작을 변경할 수 있습니다.
Spack

1
@ sa125 내 답변을 편집했습니다.
Spack

1
@slhck : 단어를 시작할bash 때 물결표를 확장 하거나 변수 할당에서 a 또는 첫 번째 문자 다음에 오는 첫 문자 입니다. 그렇지 않으면 문자 그대로 처리됩니다. :=
chepner

8

나는 몇 달 동안 zpretzo를 사용하고 있으며이 문제도 경험했습니다. 변경하지 않으려는 경우 깔끔하고 유용한 솔루션을 발견했습니다. 단순히 명령에 백 슬래시를 추가하십시오.

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

이게 도움이 되길 바란다!


훌륭한 솔루션 !!
yorch

완벽, 이것은 OSX에서 저에게 효과적이었습니다!
sMyles

대박 !! 그러나 왜 / 어떻게 작동합니까?
Kannan Ramamoorthy

3

이렇게하면 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)'

그리고 이것은 .zshrc에 들어 갑니까?
Morgan

예, 이것은 zsh 구성으로갑니다. FWIW에서 새 쉘을 시작하고 ( zsh -f정식 쉘 conf의 경우) 쉘에서 명령을 복사하여 붙여 넣은 다음 명령을 입력 (또는 붙여 넣기)하십시오 rsync. 당신은 마술 같은 일을 보게 될 것입니다 ;-) (URL의 특수 문자는 자동으로 인용됩니다)
Francisco

당신은 내 대답을 받아 들여야합니다 :-P 이것은 전체 명령에 대해 글 로빙을 인용하거나 끄는 것보다 훨씬 낫습니다.
Francisco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.