Der Befehl scp, der in bash ausgeführt wird, funktioniert in zsh nicht

14

Dieser Befehl funktioniert gut in 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

aber in zsh schlägt es fehl, es werden keine Dateien gefunden:

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

Was läuft falsch?

K.-Michael Aye
quelle
Ich habe mich gefragt, ob es in Ordnung ist, hier etwas zu posten, aber ich habe nach zsh und scp gesucht und viele Einträge gefunden, von denen keiner als "in der Warteschleife" markiert ist, sonst hätte ich es hier nicht gepostet.
K.-Michael Aye

Antworten:

16

Das Problem ist , dass zshsie Globbing den Remote - Pfad. Sie können dies überprüfen, indem Sie

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

Um das Globbing für scp-Remote-Pfade zu deaktivieren, andernfalls das Globbing unverändert zu lassen (von hier aus ), fügen Sie dies zu Ihrem .zshrc- hinzu.

# 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
quelle
1
Prost. Bestätigt. Kann ich das ausschalten?
K.-Michael Aye
1
@ K.-MichaelAye Antwort editiert, aber ja.
Elliott Frisch
Und dieser Hack funktioniert auch. Vielen Dank! (Hinzugefügt zu meinem .zshrc)
K.-Michael Aye
2

Wenn Sie einfache Anführungszeichen verwenden, funktioniert es:

scp 'remote.host.com:files*' .
Naveed Ahmed
quelle
Ich werde Ihnen +1 geben, da dies eine einfache Lösung für die Verwendung von Cygwin war. Vielen Dank!
Carlos
einfach und leicht zu beheben. Vielen Dank! Kein weiterer Haken erforderlich.
Kate