Ich sehe immer wieder Antworten, die diesen Link zitieren, die eindeutig „Parse ls
nicht !” Das stört mich aus mehreren Gründen:
-
Es scheint, dass die Informationen in diesem Link ohne Frage pauschal akzeptiert wurden, obwohl ich beim gelegentlichen Lesen zumindest ein paar Fehler erkennen kann.
-
Es scheint auch, als ob die in diesem Link genannten Probleme keinen Wunsch geweckt haben, eine Lösung zu finden.
Ab dem ersten Absatz:
…wenn Sie [ls]
fragen für eine Liste
von Dateien gibt es ein riesiges Problem:Unix erlaubt fast jedes Zeichen in
einem Dateinamen, einschließlich Leerzeichen, Zeilenumbrüche, Kommas, Pipe-Symbole und
so ziemlich alles andere, was Sie tun würden Versuchen Sie jemals, es als Trennzeichen zu verwenden, außer
NUL. … ls
trennt Dateinamen mit Zeilenumbrüchen. Das ist in Ordnung
bis Sie eine Datei mit einem Zeilenumbruch im Namen haben. Und da ich keine
Implementierung von ls
kenne das es Ihnen erlaubt,
Dateinamen mit NUL-Zeichen anstelle von Zeilenumbrüchen zu beenden, so dass wir
keine Liste von Dateinamen sicher mit ls
erhalten können .
Schade, oder? Wie immer Können wir einen aufgelisteten Datensatz mit Zeilenumbrüchen für Daten handhaben, die Zeilenumbrüche enthalten könnten? Nun, wenn die Leute, die Fragen auf dieser Website beantworten, so etwas nicht täglich tun würden, könnte ich denken, dass wir in Schwierigkeiten stecken.
Die Wahrheit ist jedoch, dass die meisten ls
Implementierungen bieten tatsächlich eine sehr einfache API zum Analysieren ihrer Ausgabe, und wir alle haben dies die ganze Zeit getan, ohne es überhaupt zu merken. Sie können einen Dateinamen nicht nur mit null beenden, Sie können ihn auch mit null oder mit einer beliebigen anderen beliebigen Zeichenfolge beginnen. Darüber hinaus können Sie diese beliebigen Zeichenfolgen pro Dateityp zuweisen . Bitte beachten Sie:
LS_COLORS='lc=