Stimmt bashs * mit Dateien in alphanumerischer Reihenfolge überein?

25

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

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

cat * 

dh die gleiche Reihenfolge, die lsgibt.

von dort
quelle

Antworten:

26

Kurze Antwort: Ja, das wird es.

Von der Bash- Manpage:

Nach der Wortteilung durchsucht Bash jedes Wort nach den Zeichen '*', '?' Und '[', sofern nicht die Option -f gesetzt wurde (siehe Die eingebaute Einstellung). Wenn eines dieser Zeichen angezeigt wird, wird das Wort als Muster angesehen und durch eine alphabetisch sortierte Liste von Dateinamen ersetzt, die mit dem Muster übereinstimmen.

BloodPhilia
quelle
6
Beachten Sie, dass "alphabetisch" (insbesondere $LC_COLLATE) von den Ländereinstellungen abhängt .
Grawity
4
@grawity true, aber es würde die gleiche Ausgabe wie lsauf demselben System ergeben.
BloodPhilia
8

Die kurze Antwort lautet Ja, aber Sie müssen sich dessen bewusst sein, wie die alphanumerische Reihenfolge laut Ihrer Meinung sein sollte, da sie möglicherweise nicht der natürlichen Reihenfolge entspricht, die Sie sich vorgestellt haben.

Führen Sie beispielsweise einen Test durch, um herauszufinden, wie Groß- und Kleinbuchstaben auf Ihrem System behandelt werden, und um herauszufinden, ob es sich um Zahlenfolgen handelt.

Ein häufiges Problem bei der Bestellung von Listen mit 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 zu vermeiden müssen Sie entweder eine Manipulation an der zurückgegebenen Liste von Dateien oder Umbenennen von Dateien , so dass einstelligen Bereich zu tun haben führende Null (dh blah_01.txt, blah_02.txtusw.).

dtlussier
quelle