Erlaubte Dateinamen

Borner

Neuer User
Mitglied seit
19 Mai 2007
Beiträge
112
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe mich auf meiner Fritzbox mit telnet eingeloggt und wollte vom USB Speicher Daten kopieren.
Dabei ist mir aufgefallen, dass die shell offensichtlich Probleme mit Dateinamen/Ordnernamen hat, die mit einem "-" beginnen.
Beispielsweise:
-Ghe+ke=

Ist euch das auch schon aufgefallen?
...und kennt jemand dafür eine Lösung?


Danke & viele Grüße,
Borner
 
Die Shell hat mit Minus-Zeichen nichts am Hut. Es kommt darauf an, was die aufgerufenen Programme damit tun.

Bei Pfad-Name kann man immer ./-... verwenden.
Bei vielen Programmen gibt es auch die Möglichkeit, mit -- zu sagen, dass danach keine Optionen mehr kommen.

Um welche Programm geht es denn?
 
Die Shell hat mit Minus-Zeichen nichts am Hut
Naja, jain würde ich sagen, denn es muss ja doch jemand entscheiden, wo ein übergebener Parameter aufhört und wo ein anderer anfängt.
Fängt allerdings ein Dateinmae mit "-" an, scheint die Shell den darauffolgenden Buchstaben als Parameter an das Programm zu übergeben.

Schau hier:

# touch "-mm"
BusyBox v1.18.5 (2012-03-27 14:03:03 CEST) multi-call binary.

Usage: touch [-c] [-d DATE] [-r FILE] FILE [FILE]...

Update the last-modified date on the given FILE

Options:
-c Don't create files
-d DT Date/time to use
-r FILE Use FILE's date/time

gleiches Problem bei touch \-mm
...wobei ich das "-" ja gerade für die shell maskiere.

Um welche Programm geht es denn?
Ich habe es bei verschiedenen Systemtools bemerkt und habe daher auf die shell getippt.
cp mv touch ...gibt sicher noch mehr
...oder es ist in dem Fall nicht die shell sondern die BusyBox.
Da bin ich mir nicht ganz sicher: die BusyBox unterscheidet sich vom klassischen Linuxsystem darin, dass viele Befehle keine extra Programme sind sondern bei BusyBox build in, oder??
 
Naja, jain würde ich sagen, denn es muss ja doch jemand entscheiden, wo ein übergebener Parameter aufhört und wo ein anderer anfängt.
Das tut die Shell. Parameter werden mit Leerzeichen oder Tab getrennt.
Fängt allerdings ein Dateinmae mit "-" an, scheint die Shell den darauffolgenden Buchstaben als Parameter an das Programm zu übergeben.
Die Shell übergibt alle Parameter an das Programm, ob die mit "-" anfangen oder nicht.
gleiches Problem bei touch \-mm
...wobei ich das "-" ja gerade für die shell maskiere.
Was genau deswegen nichts bringt, weil das "-" für die Shell keine spezielle Bedeutung hat.
Ich habe es bei verschiedenen Systemtools bemerkt und habe daher auf die shell getippt.
cp mv touch ...gibt sicher noch mehr
Der Grund dafür ist, das die meisten Programme sich in dieser Hinsicht ähnlich verhalten. Das macht es viel leichter, als wenn es bei jedem Programm anders wäre. Das Programm "echo" z.B. verhält sich aber anders.
die BusyBox unterscheidet sich vom klassischen Linuxsystem darin, dass viele Befehle keine extra Programme sind sondern bei BusyBox build in, oder??
Das hat damit nichts zu tun, BusyBox ist darauf ausgelegt, kompatibel zu anderen Systemen zu sein.

Was Du hier beschreibst ist das ganz normale Verhalten auf jedem UNIX ähnlichen System.
 
Das tut die Shell. Parameter werden mit Leerzeichen oder Tab getrennt.

Ähm, ja. absolut. Ich stand voll auf'm Schlauch, aber du hast recht. Natürlich, denn im Programm fängt man ja an, die Parameter zu analysieren. stimmt. War gedanklich irgendwie falsch abgebogen.

Was Du hier beschreibst ist das ganz normale Verhalten auf jedem UNIX ähnlichen System.

Ich habe leider gerade kein Unix zur Hand, aber ein Ubuntu, also Linux verhält sich tatsächlich genauso. Ich bin total baff, denn ich habe jahrelang Solraissysteme administriert, steckte echt tief in den Systemendrinnen und mir ist das nie aufgefallen. Klingt fast so, dass ich nie mit einer Datei zu tun hatte, die mit einem "-" beginnt! :-/ strange...

Jetzt macht mir auch "deine" relative Adressierung ./-... Sinn.
...denn hauptsache der "Parameter" fängt nicht mit "-" an und wird versehentlich als (ungültige) Option interpretiert


Danke, Gruß und schönes Osterfest...
 
Dann hattest Du wirklich nie eine Datei mit "-" am Anfang. Es ist auch eher ungewöhnlich, Dateien so zu benennen.

Bei solchen Dateien kommt man auch mit '*' nicht weiter, weil der von der Shell expandiert wird und das Programm den Namen bekommt.

Wie oben schon geschrieben, erkennen die meisten Programme auch "--" als Ende der Optionen. Bei Pfadnamen gibt es die Möglichkeit mit "./", aber bei Programmen wie grep funktioniert das nicht. Hiermit kann man nach dem Muster "-x" suchen:
Code:
grep -- -x file
 
Ja, die Sache ist schon etwas ätzend, denn weder cp noch mv wollen so richtig funktionieren :-(
egal ob ./-...
oder mv -- ./-
oder mv -- -...
 
Was geht nicht?
Code:
# mkdir -- -dir
# touch -- -file
# cp -- -file -file2
# ls -ld -- *
drwxr-xr-x    2 root     root             0 Apr  8 21:22 -dir
-rw-r--r--    1 root     root             0 Apr  8 21:22 -file
-rw-r--r--    1 root     root             0 Apr  8 21:22 -file2
# mv -- -file -dir/
# ls -l -- -dir/*
-rw-r--r--    1 root     root             0 Apr  8 21:22 -dir/-file
 

Ich denke, es ist ein Problem hier im Einzelfall


mv -- -mS4hAIrOGqQKA+9l0j /my/new/path/.

abstrakt:
mv -- dir1 /my/new/path/.


Der Fehler ist:
mv: can't remove '/my/new/path/-mS4hAIrOGqQKA+9l0j': Is a directory

..ich nehme das jetzt einfach mal als Rest meiner Versuche?! Egal.
cp-R geht

Danke dir für deine Unterstützung. :)
 

Statistik des Forums

Themen
244,695
Beiträge
2,216,692
Mitglieder
371,315
Neuestes Mitglied
jack-mack
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.