Können Sie ls -labitte die Ergebnisse von zeigen ?
Ryekayo
2
Besser noch ls -lb(oder ls -labwenn der Name mit beginnt .).
G-Man sagt "Reinstate Monica"
1
Und was genau ist passiert? Sie heruntergeladen dir1/foound dir2/fooauf Maschine X, dann scp‚ed sich dir42auf Maschine Y, und sie kamen als separate Dateien mit dem gleichen Namen aus? Oder Sie haben zwei Dateien mit demselben Namen in dasselbe Verzeichnis (auf Computer X) heruntergeladen und sie wurden als separate Dateien mit demselben Namen ausgegeben?
G-Man sagt "Reinstate Monica"
Antworten:
38
Vielleicht sehen sie nur so aus, als hätten sie den gleichen Namen.
Etwas besser. Das Leerzeichen wird als gekennzeichnet \ (obwohl dies nicht bei allen lsImplementierungen der Fall ist).
$ LC_ALL=C ls -1b
Ste\314\201phane
St\303\251phane
St\303\251phane\
St\342\200\213\303\251phane
Jetzt sprechen wir (alle Nicht-ASCII-Zeichen werden als Oktalwert ihrer Bytebestandteile gerendert).
Sie können dies auch tun, und das funktioniert für jede Eingabe:
$ ls | LC_ALL=C sed -n l
Ste\314\201phane$
St\303\251phane$
St\342\200\213\303\251phane$
St\303\251phane $
Hier ist das Zeilenende markiert, mit $dem der nachfolgende Raum leichter erkannt werden kann. Dies hilft jedoch nicht, eine aufgerufene Datei zu erkennenStéphane<newline>Stéphane
$ ls | perl -Mopen=locale -MUnicode::UCD=charinfo -lpe '
s/[^\41-\177]/"<".charinfo(ord$&)->{name}.">"/ge'
Ste<COMBINING ACUTE ACCENT>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane
St<ZERO WIDTH SPACE><LATIN SMALL LETTER E WITH ACUTE>phane
St<LATIN SMALL LETTER E WITH ACUTE>phane<SPACE>
Wenn es Ihnen nichts ausmacht, wenn ich Stephane frage, was macht der Piped-Befehl LC_ALL=C sed -n 1?
Ryekayo
3
sedDer lBefehl '' zeigt die Eingabe in visuell eindeutiger Form an. Mit LC_ALL = C stellen wir sicher, dass dafür nur ASCII-Zeichen verwendet werden (obwohl dies zumindest bei GNU sednicht erforderlich ist).
Stéphane Chazelas
2
@ StéphaneChazelas Sie können auch verwenden:LC_ALL=C ls -b
vinc17
@ vinc17, guter Punkt, das ist auch besser als sed, um Dateien mit Zeilenumbrüchen zu erkennen, aber nicht immer, um nachgestellten Leerzeichen zu erkennen. Ich habe es der Antwort hinzugefügt.
ls -la
bitte die Ergebnisse von zeigen ?ls -lb
(oderls -lab
wenn der Name mit beginnt.
).dir1/foo
unddir2/foo
auf Maschine X, dannscp
‚ed sichdir42
auf Maschine Y, und sie kamen als separate Dateien mit dem gleichen Namen aus? Oder Sie haben zwei Dateien mit demselben Namen in dasselbe Verzeichnis (auf Computer X) heruntergeladen und sie wurden als separate Dateien mit demselben Namen ausgegeben?Antworten:
Vielleicht sehen sie nur so aus, als hätten sie den gleichen Namen.
Versuchen:
Sie sehen ziemlich gleich aus.
Etwas besser. Das Leerzeichen wird als gekennzeichnet
\
(obwohl dies nicht bei allenls
Implementierungen der Fall ist).Jetzt sprechen wir (alle Nicht-ASCII-Zeichen werden als Oktalwert ihrer Bytebestandteile gerendert).
Sie können dies auch tun, und das funktioniert für jede Eingabe:
Hier ist das Zeilenende markiert, mit
$
dem der nachfolgende Raum leichter erkannt werden kann. Dies hilft jedoch nicht, eine aufgerufene Datei zu erkennenStéphane<newline>Stéphane
Macht es klarer, was passiert ist.
Siehe auch diese andere Antwort für weitere Informationen zu diesem Thema.
quelle
LC_ALL=C sed -n 1
?sed
Derl
Befehl '' zeigt die Eingabe in visuell eindeutiger Form an. Mit LC_ALL = C stellen wir sicher, dass dafür nur ASCII-Zeichen verwendet werden (obwohl dies zumindest bei GNUsed
nicht erforderlich ist).LC_ALL=C ls -b