perintah scp bekerja di bash tidak berfungsi di zsh

14

Perintah ini berfungsi dengan baik di 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

tetapi di zsh gagal, tidak ada file yang ditemukan:

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

Apa yang salah?

K.-Michael Aye
sumber
Saya bertanya-tanya pada diri saya sendiri apakah boleh posting ini di sini, tapi saya mencari zsh dan scp dan menemukan banyak entri, tidak ada yang ditandai sebagai 'ditahan', kalau tidak saya tidak akan mempostingnya di sini.
K.-Michael Aye

Jawaban:

16

Masalahnya adalah bahwa zshini globbing jalan terpencil. Anda dapat memverifikasi ini dengan

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

Untuk mematikan globbing untuk jalur remote scp, tetapi sebaliknya tinggalkan globbing yang sama (dari sini ) tambahkan ini ke Anda.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}"
}
Elliott Frisch
sumber
1
Bersulang. Dikonfirmasi Bisakah saya mematikannya?
K.-Michael Aye
1
@ K.-MichaelAye Jawaban yang diedit, tapi ya.
Elliott Frisch
Dan retas itu juga berfungsi. Terima kasih banyak! (Menambahkannya ke .zshrc saya)
K.-Michael Aye
2

Jika Anda menggunakan tanda kutip tunggal, maka itu bekerja:

scp 'remote.host.com:files*' .
Naveed Ahmed
sumber
Saya akan memberi Anda +1 karena ini adalah perbaikan sederhana dalam menggunakan Cygwin. Terima kasih!
Carlos
perbaikan sederhana dan mudah. Terima kasih! tidak perlu kait lebih lanjut.
Kate