Wird die Erweiterung eines Platzhalters in Bash garantiert in alphabetischer Reihenfolge angezeigt? Ich bin gezwungen, eine große Datei in 10-MB-Teile aufzuteilen, damit sie von meinem Mercurial-Repository akzeptiert werden können.
Also dachte ich, ich könnte verwenden:
split -b 10485760 Big.file BigFilePiece.
und dann anstelle von:
cat BigFile | bigFileProcessor
Ich könnte:
cat BigFilePiece.* | bigFileProcessor
an seinem Platz.
Aber ich konnte nicht überall finden , die garantiert , dass die Erweiterung des Sternchens (auch bekannt als Platzhalter, aka *
) würde immer in alphabetischer Reihenfolge, so dass .aa
vor kam .ab
(im Gegensatz Zeitstempel Ordnung oder so ähnlich zu sein).
Gibt es auch Fehler in meinem Plan? Wie hoch sind die Leistungskosten für cat
das Zusammenführen der Datei?
bash
files
wildcard
large-data
Schlitten
quelle
quelle
sort
wenn Sie zusätzliche Auftragsmanipulationen benötigen.hg commit
für eineN
MB-Datei sind ungefähr3 * N
MB RAM undhg update
ungefähr2 * N
MB RAM erforderlich . Dies ist mit Mercurial 1.5 unter Linux.Antworten:
Ja, die Globbing-Erweiterung ist alphabetisch.
Von der Bash-
man
Seite:quelle
ls -l [[:lower:]]
anstelle von tunls -l [a-z]
.mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]
. Die "z" -Datei wird nur im Sekundentakt aufgelistet,ls
da sie nach Dateinamen in Kleinbuchstaben fragt. Die erstels
- die ohne die äußeren eckigen Klammern - fragt nach Dateinamen mit einzelnen Zeichen aus der Liste der Zeichen ":", "l", "o", "w", "e" und "r". In beiden Fällen begrenzen die äußersten eckigen Klammern einen Klammerausdruck, in dem Zeichen und Klassen aufgelistet sind. Im Fall von[[:lower:]]
bezeichnen die inneren eckigen Klammern, Doppelpunkte und das Wort eine Zeichenklasse. ...Es ist ein dokumentiertes Verhalten,
bash
auf das Sie sich in Ihren Skripten verlassen können. Dies gilt auch für andere Bourne-kompatible Shells seit sehr langer Zeit ... obwohl es Eckfälle in Bezug auf Groß- / Kleinschreibung oder nicht-alphanumerische Zeichen geben kann.(Die resultierende Liste
bash
in ist fast "ASCII-konform" - mit der Ausnahme, dass Klein- und Großbuchstaben so zusammengestellt werden, als gäbe es keine Unterschiede zwischen Groß- und Kleinbuchstaben, jedoch mit Kleinbuchstaben, die vor den entsprechenden Großbuchstaben stehen. Alle nicht -Alphabetiker sollten in derselben Reihenfolge wie in ASCII sortiert sein.Wie andere darauf hingewiesen haben, kann dies durch Ihre sprachbezogenen Umgebungseinstellungen gestört werden: LANG im Allgemeinen und LC_COLLATE im Besonderen. Am sichersten ist es möglicherweise, Befehle auszuführen, die von der Glob-Erweiterungsreihenfolge unter einem
env
Befehl abhängen , um die Umgebung zu löschen (mit-i
oder-u
nach Bedarf) oder die Ergebnisse weiterzuleitensort
, um eine zuverlässige Sequenzierung zu gewährleisten.quelle
Glob-Erweiterungen sind zwar alphabetisch sortiert, beachten jedoch auch die Spracheinstellung der Shell.
Stellen Sie sicher, dass dies in Ihrem Skript auf "C" gesetzt ist, wenn dies portabel sein soll.
quelle