Thread Dateisortierung (39 answers)
Opened by IceRage at 2012-02-04 02:17

GUIfreund
 2012-02-04 14:27
#155855 #155855
User since
2011-08-08
559 articles
BenutzerIn
[default_avatar]
2012-02-04T01:17:20 IceRage
ich lese ein Verzeichnis mit
Code (perl): (dl )
1
2
3
opendir(DIR,$directory);
my @files = readdir(DIR);
closedir(DIR);

aus.

Wie müsste jetzt das Sortkommando lauten, damit in @files genau die selbe Sorteirreihenfolge wie in WinXP gespeichert ist?

Zunächst muss man mal wissen, mit welchem Tool man unter Windows sortiert. Windows Explorer z. B. sortiert erst die Ordner, dann die Dateien, in der Details-Ansicht nach der Spalte und in der Richtung, die man zuletzt in der Headerzeile angeklickt hat (erkennbar am Dreieck hinter dem Spaltennamen). Das Kommando dir sortiert bei mir alphabetisch Ordner und Dateien gemischt (die Variable dircmd ist nicht gesetzt). Auch muss man beachten, dass Windows Dateinamen ohne Beachtung der Groß-/Kleinschreibung sortiert. Ich weiß nicht, ob man das ändern kann.

Ich habe die Sortierung mit Perl mit der von "dir" verglichen. Zu meiner Verblüffung erhalte ich auf Anhieb dieselbe Reihenfolge, mit einer Ausnahme: Die Datei ~$rainer.htm wird bei "dir" nicht angezeigt. Wieso ist die Sortierung von cmp case-insensitive? "use locale;" habe ich in meinem Skript nicht benutzt.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
opendir(DIR,$directory);

my @files = map {
    $_->[1]
} sort {
    $b cmp $a
} map {
    ["$directory/$_", $_]
} (readdir DIR);
print "$_\n" foreach @files;

Wenn du Ordner und Dateien getrennt haben willst, wirst du zwei Durchläufe brauchen.
Gruß
GUIfreund

View full thread Dateisortierung