команда scp, що працює в bash, не працює в zsh


15

Ця команда чудово працює в bash:

bash-3.2$ scp luna4:/u/paige/maye/src/diviner/notebooks/plots/hk_* .
hk_az.png                                                   100%  126KB 126.0KB/s   00:00
hk_baffle.png                                               100%  166KB 166.3KB/s   00:01
hk_bb.png                                                   100%  144KB 143.8KB/s   00:00
hk_el.png                                                   100%  115KB 115.3KB/s   00:00
hk_fpa.png                                                  100%  123KB 123.2KB/s   00:00
hk_fpb.png                                                  100%  126KB 125.7KB/s   00:00
hk_hybrid.png                                               100%   99KB  98.7KB/s   00:00
hk_oba.png                                                  100%  140KB 139.7KB/s   00:00
hk_solar.png                                                100%  206KB 205.6KB/s   00:00
hk_temp.png                                                 100%   62KB  61.8KB/s   00:00
hk_yoke.png                                                 100%  122KB 121.7KB/s   00:00
bash-3.2$ exit

але в zsh це не вдається, ніяких файлів не знайдено:

$ scp luna4:/u/paige/maye/src/diviner/notebooks/plots/hk_* .
zsh: no matches found: luna4:/u/paige/maye/src/diviner/notebooks/plots/hk_*

Що йде не так?


Мені було цікаво, чи нормально це публікувати тут, але я шукав zsh і scp і знайшов багато записів, жоден з яких не позначений як "на очікуванні", інакше я б не розмістив його тут.
К.-Майкл Айе

Відповіді:


16

Проблема полягає в тому, що zshце підстановка віддаленого шляху. Ви можете це підтвердити

scp luna4:"/u/paige/maye/src/diviner/notebooks/plots/hk_*" .

Щоб вимкнути глобус для віддалених шляхів scp, але в іншому випадку залиште глобус таким же ( звідси ), додайте це до свого .zshrc-

# Disable globbing on the remote path.
alias scp='noglob scp_wrap'
function scp_wrap {
  local -a args
  local i
  for i in "$@"; do case $i in
    (*:*) args+=($i) ;;
    (*) args+=(${~i}) ;;
  esac; done
  command scp "${(@)args}"
}

1
Ура. Підтверджено. Чи можу я вимкнути це?
К.-Майкл Айе

1
@ K.-MichaelAye Відредагована відповідь, але так.
Елліот Фріш

І цей хак теж працює. Щиро дякую! (Додав його до мого .zshrc)
K.-Michael Aye

4

Якщо ви використовуєте одинарні лапки, то це працює:

scp 'remote.host.com:files*' .

Я поставлю вам +1, оскільки це було простим виправленням використання Cygwin. Спасибі!
Карлос

просто та легко виправити. Спасибі! немає необхідності в подальшому гачку.
kate
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.