Nicht ganz bash
entkommen Problem, es scp
x:
als [user @] Hostpräfix Behandlung, versuchen:
scp ./file:\ name.mp4 [email protected]:"/path/to/dest"
relativ (zB ./
) oder vollständig qualifizierte Pfade (/path/to/source
) verhindert, dass dieses Verhalten - das Vorhandensein von /
vor einem :
bewirkt, dass OpenSSH die Überprüfung auf ein mögliches host:
oder [email protected]:
-Präfix beendet). OpenSSH's scp
nur spezielle Fälle Dateinamen, starten mit einem Doppelpunkt damit diese ohne Probleme zu arbeiten, hat es keine Unterstützung für eine :
im normalen Sinne zu entkommen, und hat keine andere Vorstellung von gültigen Hostnamen so fast jeder Dateiname mit einem :
kann Ursache dafür.
(Aufgrund verein Parsen von []
eingeschlossen IPv6-Adressen des OpenSSH, können Sie erfolgreich scp
Dateien :
enthält, die mit [
starten oder @[
vor dem :
enthalten und enthalten keine ]:
, aber das ist nicht generell nützlich ;-)
(der folgende Text wurde geschrieben, wenn die original question war Wie entkommen ich einen Doppelpunkt in der bash? Es gilt für diese Situation, aber nicht beschränkt auf scp
wie kein Betrag des Shell-Escaping dort helfen.)
Um die Frage zu beantworten, wie :
zu entkommen, brauchen Sie nicht zu, sondern „\:
“ funktioniert.Orte, die ein :
verwendet wird:
- die Null Befehl
:
, Flucht keine Notwendigkeit zu, obwohl können Sie, wie \e\c\h\o foo
es keine Auswirkung auf den Befehl hat („keine Wirkung“ ist nicht ganz richtig, wenn Sie entkommen ein oder mehr Zeichen wird es verhindern, dass ein Alias angepasst)
PATH
(und andere, CDPATH
, MAILPATH
) keine nützliche Wirkung, die Werte zu entkommen hat (ich habe es nicht gelungen, ein Programm in meinem PATH aus einem Verzeichnis ein :
enthält, laufen, was ist ein wenig unerwartet)
- Parameter Erweiterung
${name:-x}
und mehr, name
muss [a-zA-Z_][a-zA-Z0-9_]
sein, also keine Notwendigkeit, Variablen-Namen zu entkommen, und da es keine Zweideutigkeit ist, keine Notwendigkeit, nachfolgende :
in den anderen Varianten des Parameter Expansion
? :
trinary auf Variablen und Zahlen nur zu entkommen arbeitet, keine Notwendigkeit
==
und =~
mit Klassen in dem Muster zu entkommen, wie [[:digit:]]
, können Sie mit \:
entkommen, aber ich bin ratlos, wie das überhaupt nützlich sein könnte ...
- innerhalb Namen Befehl oder eine Funktion, keine Notwendigkeit, zu entkommen, hat
\:
keinen nützlichen Effekt
(Beachten Sie, dass der Null-Befehl ist nur :
, können Sie einen Befehl oder eine Funktion wie „:foo
“ genannt haben, und es kann ohne Flucht aufgerufen werden, in dieser Hinsicht es #
anders ist, wo ein Befehl #foo
genannt müßte Escape sein.)
Das gleiche Problem betrifft 'rsync'. Glücklicherweise hilft die selbe Lösung - die Dateinamen mit '. /' Voranstellen - auch dort. –