Dateinamen für Linux mit Leerzeichen: Kann mir jemand helfen?
Kann das sein dass Linux Dateinamen die mit Leerzeichen versehen, sind nicht richtig verarbeiten kann? Wenn ich zum Beispiel einen Ordnernamen mit Eigene (leer) Dateien anlegen, dann kann ich mit cd Eigene Dateien nicht in das Verzeichnis wechseln. Ich kann diesen Ordner, bzw. diese Datei auch nicht in eine andere Hierarchieebene verschieben. Zusammengeschrieben funktioniert das aber. Kann man dann diese Leerzeichen durch Sternchen ersetzen, oder kann das zu Problem führen?
Vielen Dank für die Antworten schon im Voraus
LA
4 Antworten
Du musst das Leerzeichen escapen, da er es sonst nicht versteht. Escaping geschieht landläufig per \, also dem Backslash. Du musst also Eigene\ Dateien eingeben.
Den Verzeichnisnamen und/oder Pfad in Anführungszeichen setzen funktioniert auch:
cd "Eigene Dateien"
Das ist ja eigentlich auch logisch. Das hat nichts mit der Verarbeitung der Verzeichnisnamen zu tun, sondern mit der Befehlsverarbeitung der Shell. Woher soll die Shell denn wissen, dass das zweite Wort noch zum Namen gehört und nicht ein zusätzliches Argument für den Befehl "cd" ist?
Das so genannte escapen tut nichts anderes als dem Interpreter (in dem Fall, der Bash, zu sagen dass das Zeichen das nach dem Backslash kommt als solches zu sehen ist, also "Ein Leerzeichen ist ein Leerzeichen"
Selbiges gilt ja auch in anderen Programmen oder sogar hier in gutefrage.net, wo man ein C:\ nur darstellen kann wenn man zwei Backslashes verwendet. Oder auch beim anlegen eines Verzeichnisses mit dem Namen:
mkdir C:\
erwartet die Eingabe eines Leerzeichens um das Kommando abzuschließen.
Die Eingabe von:
mkdir C:\ #
Genau da ist ein Leerzeichen nach dem \ und so wird dann ein Verzeichnisname mit Leerzeichen erstellt, deswegen muß man es so schreiben:
mkdir C:\\
Andernfalls sieht das dann so aus:
linuxhase@openSUSE-Desk:~> # ls -lQ|head -44|tail -2
drwxr-xr-x 2 root root 4096 3. Sep 15:08 "C:"
drwxr-xr-x 2 root root 4096 3. Sep 15:08 "C: "
Linuxhase
Hallo
Kann das sein dass Linux Dateinamen die mit Leerzeichen versehen, sind nicht richtig verarbeiten kann?
Jaein
Man kann jetzt nicht pauschal sagen das GNU/Linux Systeme das nicht könnten, sondern es kommt auf die bearbeitende Software an.
dann kann ich mit cd Eigene Dateien nicht in das Verzeichnis wechseln.
Beispiel:
linuxhase@openSUSE-Desk:~> mkdir "Eigene Dateien"
linuxhase@openSUSE-Desk:~> cd Eigene\ Dateien/
linuxhase@openSUSE-Desk:~/Eigene Dateien> cd ..
linuxhase@openSUSE-Desk:~> cd "Eigene Dateien"
linuxhase@openSUSE-Desk:~/Eigene Dateien>
Ich kann diesen Ordner, bzw. diese Datei auch nicht in eine andere Hierarchieebene verschieben.
linuxhase@openSUSE-Desk:~> mkdir linuxaffiner
linuxhase@openSUSE-Desk:~> mv Eigene\ Dateien/ linuxaffiner
linuxhase@openSUSE-Desk:~> ls -r1 linuxaffiner
linuxhase@openSUSE-Desk:~> Eigene Dateien
Es geht schon, wenn man die Dateinamen in Quote Zeichen steckt oder die Leerzeichen (ebenso wie auch Sonderzeichen) escapen tut, das machen die Backslashes.
Aber wenn ich in der Konsole solche Sachen zu machen habe, dann verwende ich da den Mindight Commander Dateiname: mc
Oder man baut ein Script und erstellt dafür einen Alias-Befehl mit dem man dieses aufruft.
Bei Windows ist das in der Eingabeaufforderung genauso.
Linuxhase
Microsoft hat hier wieder einmal den lange vor dem ersten Microsoft-Betriebssystem benutzen "quasi-Standard" ignoriert und seine eigenen Regeln geschaffen. Das betrifft u.a. das Leerzeichen, den Tabulator und auch den Backslash.
Jeder Benutzer und noch viel mehr der Programmierer kann hier schon Wutanfälle bekommen, wenn er einen Code für Linux und Windows benutzen will (muss).
Ein Leerzeichen hat in Unix-/Linux-Systemen die Bedeutung eines Trennzeichens zwischen Namen, also z.B. zwischen Befehlen und Parametern oder zwischen Parametern. So wird ein
cp meine_datei ziel
als Befehl Kopiere die Datei "meine_datei" nach "ziel" interpretiert.
cp meine datei ziel
kann so nicht funktionieren. Man muss also sagen, dass "meine datei" als Ganzes ein Element ist. Dafür gibt es 2 Möglichkeiten. Entweder man "entzieht dem Leerzeichen die Bedeutung Trennzeichen indem man einen Backslash vor das betreffende Leerzeichen setzt oder man setzt das betreffende Element in Hochkomma.
Da der \ bei Windows aber das Trennzeichen für Verzeichnisse ist gibt es da Probleme. Ähnlich kann es mit dem Hochkomma sein.
Um das zu umgehen, sollte man (falls man häufig Dateien zwischen Windows und Linux austauscht ) sich angewöhnen keine Leerzeichen oder Tabulatoren in Namen zu verwenden. Mit der Verwendung des _ kann man genauso (und besser) die Übersichtlichkeit erhalten. So eine Schreibweise versteht dann sogar Windows.
Alternativ zum escapen mit dem Backslash \ kannst Du den Verzeichnisnamen auch in Anführungszeichen setzen, was bei vielen Leerzeichen schneller ist:
cd "Eigene Dateien"
oder Du verwendest die Autovervollständigung, in dem Du eingibst:
cd Eigene
und dann Tab drückst. Du erhältst eine Auswahl passender Verzeichnisse oder sofort
cd Eigene\ Dateien
Danke :-) Super qualifizierte Antwort....
LA