the-jay
Goto Top

Ordnerliste unter Linux Shell erstellen

Hallo,

ich versuche verzweifelt unter Linux eine Ordnerliste zu erstellen. Mein Ziel ist es, dasselbe Resultat wie mit folgendem Windows-Befehl zu erhalten.

cmd /u /c dir Ordnername\*. /b /o:-d > folderlist-UNICODE.txt

Liste mit allen im Ordner enthaltenen Ordnern in sortierter Reihenfolge nach letztem Zugriff/Erstelldatum.

Ein Ansatz wäre mal: ls -t -Fh -c | grep /$ | sed s#/##g

Allerdings erhalte ich beim Schreiben in eine Text-Datei eine Liste ohne Zeilenumbrüche.

Vielen Dank

Content-ID: 249136

Url: https://administrator.de/contentid/249136

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

colinardo
colinardo 13.09.2014, aktualisiert am 14.09.2014 um 08:51:03 Uhr
Goto Top
ls -1dt */ | sed 's/\/$//' >folderlist.txt
man beachte hier den ersten Parameter von LS, es ist kein L sondern eine 1 !

Grüße Uwe
tHe-jAy
tHe-jAy 14.09.2014 um 09:58:18 Uhr
Goto Top
Leider erhalte ich dasselbe Ergebnis.

Bsp.:

Ordner1Ordner2Ordner3

anstatt

Ordner1
Ordner2
Ordner3

Verwendeter Editor: Windows Standard (notepad.exe)
colinardo
colinardo 14.09.2014 aktualisiert um 10:53:03 Uhr
Goto Top
Verwendeter Editor: Windows Standard (notepad.exe)
Dann ist alles klar, der Grund ist das das "dumme" Notepad nur DOS-Zeilenumbrüche mit Carriage Return "\r\n" und keine reinen Unix Zeilenumbrüche "\n" kennt! Wenn du mal mit einem HEX-Editor in die Datei hineinschaust wirst du feststellen das zwischen den Ordnern nur ein 0A für einen Linefeed(LF) vorhanden ist, wohingegen für einen DOS-Zeilenumbruch ein 0D 0A benutzt wird (CR LF).
Nehme als mal einen anderen Editor her (z.B. notepad++, oder wordpad), und du wirst sehen das sie sehr wohl da sind face-wink, die wandeln das nämlich automatisch um.

Oder du wandelst mit SED die Zeilenumbrüche zusätzlich in DOS Zeilenumbrüche um.
kombiniert mit obigem Befehl sähe das dann so aus:
ls -1dt */ | sed 's/\/$/\r/' >folderlist.txt
Grüße Uwe
tHe-jAy
tHe-jAy 14.09.2014 um 11:20:19 Uhr
Goto Top
Mit Notepad++ hast du recht.

Wenn ich jetzt allerdings \r verwende, schreibt er ein "r" hinter jeden Ordner (einzeilig in notepad.exe) - mehrzeilig mit "r" in Notepad++
Ändere ich den HEX von 72 (=r) auf 0D (=.) und öffne die Datei wiederrum mit notepad.exe ist das "r" weg und erscheint mehrzeilig.
In Notepad++ ebenfalls mehrzeilig und ohne "r".
colinardo
colinardo 14.09.2014 aktualisiert um 11:54:55 Uhr
Goto Top
Zitat von @tHe-jAy:
Wenn ich jetzt allerdings \r verwende, schreibt er ein "r" hinter jeden Ordner (einzeilig in notepad.exe) - mehrzeilig
mit "r" in Notepad++
Was für eine sed Version hast du? da gibt es einige Unterschiede ... Läuft hier aber selbst auf einem älteren Ubuntu 10.04 einwandfrei ... selbst ein gejailbreaktes iPhone macht das hier ohne murrenface-wink
Je nachdem wo du es ausführst musst du den Backslash eventuell verdoppeln.

Das sind die unterschiedlichen Varianten für die Umwandlung von UNIX in DOS Umbrüche, unter Linux:
sed "s/$/`echo -e \\\r`/"            # ksh
sed 's/$'"/`echo \\\r`/"             # bash
sed "s/$/`echo \\\r`/"               # zsh
sed 's/$/\r/'                        # gsed 3.02.80 oder neuere Versionen