Ich versuche, alle Dateien, die nicht mit dem Buchstaben "a" beginnen, in ksh zu kopieren.
Das Kopieren vom Quellcomputer zum Zielcomputer funktioniert einwandfrei :
scp -p !(a*) user@machine:/path/directory/.
Wenn ich mich jedoch auf dem Zielserver befinde und vom Quellserver kopieren möchte, schlägt Folgendes fehl:
scp -p user@machine:/path/!(a*) .
Irgendwelche Ideen?
Was ich fand, war, dass ich auf älteren HP-UX-Maschinen (parisc 11.11) [^ a] * verwenden musste, aber auf neueren Maschinen (parisc 11.31 und neuer) funktioniert es mit! (A *)
Damit bin ich gelandet. Und es funktioniert:
quelle
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 "" beginnta
.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 einesftp-server
ausführbare Datei, diesshd
gestartet wird) auf dem Remote-Computer.quelle