Thread Wie nach komplettem Dateinamen alphabetisch sortieren (11 answers)
Opened by GwenDragon at 2023-01-07 18:05

payx
 2023-01-09 21:43
#194584 #194584
User since
2006-05-04
564 articles
BenutzerIn

user image
Hallo GwenDragon,

ich habe Deiner Liste im untenstehenden Beispiel ein paar Einträge hinzugefügt, die bei bloßem sort (wie von Linuxer vorgeschlagen) möglicherweise eine unerwünschte Reihenfolge ergeben, denn vermutlich ist ja gewünscht, dass zunächst je Verzeichnis die darin enthaltenen Dateien, dann die Unterverzeichnisse erscheinen.

Deshalb sollte nach Verzeichnisnamen und Dateinamen (und Erweiterungen) separat sortiert werden.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl

use strict;
use warnings;

use List::Util qw(shuffle);
use File::Basename;

print $_->[1] . $_->[0] . $_->[2] for sort { $a->[1] cmp $b->[1] || $a->[0] cmp $b->[0] || $a->[2] cmp $b->[2] } map { [ fileparse($_, qr/\.[^.]*/) ] } shuffle (<DATA>);

__DATA__
/
/abc/
/abc/tes.pl
/abc/test_5
/abc/test_42
/abc/test_foo.txt
/abc/test_foo-2.txt
/abc/test_foo01.txt
/abc/test_foo_1.txt
/abc/test/
/abc/test/z.php4
/abc/test/z.txt
/abc-test/abc
/asdf/
/asdf/123/
/asdf/A/
/asdf/B/
/asdf/B/C/
/asdf/B/C/a.file
/home/
/home/test/
/home/test/asdf/
/home/test/asdf/jklo/
/home/test/asdf/jklo/rstuv2/
/home/test/asdf/jklo/rstuvw11/
/root/config
/root/tmp/

Im __DATA__-Block stehen die Werte in der wahrscheinlich gewünschten Reihenfolge.

Die Verzeichnisse werden hier unter Umständen auch noch nicht korrekt sortiert: abc-test sollte wohl eher nach abc kommen. Dies dürfte nur behebbar sein, indem nach allen Verzeichnisebenen nacheinander sortiert wird, wie in der Lösung von rosti.

Zahlen werden nicht numerisch betrachtet, deshalb kommt /abc/test_42 vor /abc/test_5. Der Windows-Explorer hat (seit Windows XP) so eine magische Art, nicht streng alphanumerisch, sondern "numerisch" zu sortieren (per GPO deaktivierbar), hier käme also /abc/test_5 vor /abc/test_42. Ich finde das irritierend und ziehe es vor, ggf. führende Nullen zu verwenden.

Vermutlich gibt es noch mehr Schwächen. (Z.B. fehlendes chomp\n wird für print recycelt.)

HTH
Grüße
payx

View full thread Wie nach komplettem Dateinamen alphabetisch sortieren