Warum gibt es ein zusätzliches Leerzeichen, wenn ich "ls" in das Desktop-Verzeichnis eingebe?

27

Aus Neugier fragte ich mich, ob es einen Grund für den zusätzlichen Speicherplatz gibt, wenn ich lsim Desktop-Verzeichnis tippe. Vergleichen Sie...

~/Desktop$ ls
 file1 file2 file3

...zu...

~/Documents$ ls
file1 file2 file3

Beachten Sie, dass ich lsbei der Eingabe auf dem Desktop am Anfang der Zeile ein zusätzliches Leerzeichen bekomme (nicht Teil des Dateinamens). Ich kann keinen anderen Beispielspeicherort finden, an dem ich diesen zusätzlichen Speicherplatz am Anfang der Zeile erhalte. Bekommt das noch jemand? Gibt es einen Grund?

NB: Ich verwende die Ubuntu Bionic Beaver LTS-Version und das mit ihr gelieferte Standardterminal.

Bart
quelle
Ich habe das nicht. Wenn ich eine Datei mit nur einem Leerzeichen als Name ( touch " ") erstelle, habe ich zwei Leerzeichen vor.
pLumo
6
Führen Sie ls -lastattdessen oder aus find -type f -printf "file: -%P-\n"und stellen Sie die Ausgabe bereit. Wahrscheinlich gibt es eine Datei mit nicht druckbarem Zeichen. Das Färben von Dateien kann sich möglicherweise auch darauf auswirken. \lsdir
Probieren
Ich konnte keine Dateien mit nicht druckbaren Zeichen sehen, als ich Ihre ersten 2 Vorschläge ausprobierte. Ich habe noch ein Leerzeichen, wenn ich es versuche, aber nicht, wenn ich dir benutze ...
Bart
35
Präsentieren Sie Ihre aktuelle Ausgabe.
Leichtigkeit Rennen mit Monica

Antworten:

85

Das zusätzliche Leerzeichen wird angezeigt, wenn Sie Dateinamen in Ihrem Verzeichnis benötigen '(z. B. Dateinamen mit Leerzeichen oder anderen Sonderzeichen).

~/mytmp$ ls
 a           'file(abc)'         proyecto3.csv   test         Test.sh
 b           'file(ab,c?).mp4'   rootfile        Test1.txt    Test.zip
 F26         'file(abc?).mp4'    scr             Test2.test   vowels
 Feb          guess              script          Test2.txt
'Feb 26 xx'   hw                 something       test.rar

Nach dem Entfernen der "seltsamen" Dateien erhalte ich:

~/mytmp$ ls
a    guess  proyecto3.csv  script     test        Test2.txt   Test.sh
b    hw     rootfile       something  Test1.txt   test.rar    Test.zip
F26  loop   scr            speak      Test2.test  testscript  vowels
muclux
quelle
Vielen Dank für die Erklärung - das klingt für mich richtig. Was mich gestört hat, ist, dass das zusätzliche Leerzeichen am Anfang der Zeile nicht unbedingt vor der Datei mit den Sonderzeichen stehen muss. Aber ich denke, das wird gemacht, um die Präsentation im Terminal klarer zu machen.
Bart
53

Ich bin mir ziemlich sicher, dass file1 file2 file3nicht genau das auf Ihrem Bildschirm angezeigt wird. Sie haben wichtige Informationen (die tatsächlichen Dateinamen) ausgelassen, die leicht relevant sein könnten.

Ich gehe davon aus, dass Sie einen Dateinamen haben, der ein Leerzeichen oder ein anderes Sonderzeichen enthält.

Neuere Versionen von coreutils lszitieren solche Dateinamen, normalerweise in einfachen Anführungszeichen. Wenn mindestens eine Datei ein solches Anführungszeichen erfordert, wird vor allen anderen Dateinamen ein Leerzeichen eingefügt, sodass sie sich "gut" ausrichten, wenn sie sich untereinander befinden, d. H. Das einfache Anführungszeichen (Apostroph) ist für die Ausrichtung ignoriert.

Siehe --quoting-styleund -Nim Handbuch Seite lsfür einige weitere Details, und der Abschnitt „Formatierung der Dateinamen“ in seiner Info - Seite für noch mehr Details. Sie könnten zB ein Aliasing lsfür in Betracht ziehen ls -N.

egmont
quelle