An übergebene entfernte Namen scp
werden tatsächlich als durch Leerzeichen getrennte Liste von Mustern auf der entfernten Seite interpretiert. Dies ist oft ärgerlich, wenn Sie versuchen, eine Datei zu kopieren, deren Name Leerzeichen enthält. Hier ist es jedoch nützlich, scp -p 'user@machine:/path/a*' .
alle Dateien zu kopieren, deren Name mit "" beginnt a
.
Ihr Befehl funktioniert, wenn Sie das Muster so zitieren, dass es nicht lokal, sondern remote interpretiert wird, sofern Sie eine weitere Hürde überwinden. Das Muster !(a*)
ist kein einfaches Shell-Muster, sondern eine ksh-Erweiterung (diese Bash- und Zsh-Befehle werden auch unterstützt, wenn Sie die entsprechende Option festlegen). Dies funktioniert also nur, wenn Ihre Remote-Shell ksh ist, nicht, wenn es sich um eine andere Shell handelt, exec ksh
von der Sie stammen, .profile
oder um etwas Ähnliches.
Der einfachste Weg, es sei denn, Sie befinden sich in einer eingeschränkten oder antiken Umgebung, besteht darin, dies zu vergessen scp
. Sie möchten, dass Remote-Dateien genau wie lokale Dateien funktionieren . Machen Sie sie also zu lokalen Dateien: Hängen Sie das Remote-Verzeichnis mit sshfs ein . Dies erfordert FUSE auf dem lokalen Computer und einen SFTP-Server (dh eine sftp-server
ausführbare Datei, die sshd
gestartet wird) auf dem Remote-Computer.
mkdir ~/net/machine
sshfs user@machine:/ ~/net/machine
cp -p ~/net/machine/path/!(a*) .