Entspricht bash * den Dateien in alphanumerischer Reihenfolge?

4962
therefromhere

Ich möchte eine Reihe von Dateien in der Reihenfolge der Dateinamen zusammenfügen.

Kann man davon ausgehen, dass ich sie in alphanumerischer Reihenfolge bekomme?

cat * 

dh die gleiche Reihenfolge, die lsgibt.

22

2 Antworten auf die Frage

22
BloodPhilia

Kurze Antwort: Ja, das wird es.

Von der Bash-Man- Seite:

Nach der Wortaufteilung durchsucht Bash jedes Wort nach den Zeichen '*', '?' Und '[', sofern nicht die Option -f eingestellt wurde (siehe The Set Builtin). Wenn eines dieser Zeichen erscheint, wird das Wort als Muster betrachtet und durch eine alphabetisch sortierte Liste von Dateinamen ersetzt, die dem Muster entsprechen.

Beachten Sie, dass "alphabetisch" abhängig von den Ländereinstellungen (insbesondere "$ LC_COLLATE") variiert. grawity vor 13 Jahren 6
@grawity wahr, aber es würde zu der gleichen Ausgabe führen wie "ls" auf demselben System. BloodPhilia vor 13 Jahren 4
7
dtlussier

Die kurze Antwort lautet ja, aber Sie müssen wissen, wie die alphanumerische Reihenfolge aussehen sollte, da sie möglicherweise nicht der natürlichen Reihenfolge entspricht, die Sie sich vorstellen.

Führen Sie beispielsweise einen Test durch, wie Groß- und Kleinschreibung behandelt wird, um auf Ihrem System herauszufinden, sowie Zahlenfolgen.

Ein häufig auftretendes Problem bei der Sortierung von Listen von Dateien, die von einem Glob zurückgegeben werden, sind nummerierte Dateien. Ich bekomme oft Dateien mit folgenden Nummern:

blah_1.txt blah_2.txt ... blah_10.txt blah_11.txt 

Ein Glob, der das verwendet, *gibt sie jedoch nicht in dieser Reihenfolge zurück. Stattdessen erhalten Sie Folgendes:

blah_1.txt blah_10.txt blah_11.txt ... blah_2.txt blah_20.txt ... 

Also - dieses Problem vermeiden müssen Sie entweder eine Manipulation an der zurückgegebenen Liste von Dateien zu tun, oder Dateien umbenennen, so dass einzelne Ziffern haben führende Nullen (dh blah_01.txt, blah_02.txtusw.).