Czy rozszerzenie znaku wieloznacznego w Bash jest gwarantowane w kolejności alfabetycznej? Jestem zmuszony podzielić duży plik na 10 Mb, aby mogły zostać zaakceptowane przez moje repozytorium Mercurial.
Pomyślałem więc, że mogę użyć:
split -b 10485760 Big.file BigFilePiece.
a następnie zamiast:
cat BigFile | bigFileProcessor
Mógłbym zrobić:
cat BigFilePiece.* | bigFileProcessor
Na swoim miejscu.
Jednak nie mogłem znaleźć nigdzie, co gwarantowałoby, że rozwinięcie gwiazdki (aka wildcard, aka *
) zawsze będzie w kolejności alfabetycznej, tak aby .aa
było wcześniej .ab
(w przeciwieństwie do kolejności znaczników czasu lub czegoś podobnego).
Czy są jakieś wady mojego planu? Jak duży jest koszt wydajności cat
wspólnego utworzenia pliku?
bash
files
wildcard
large-data
Sanki
źródło
źródło
sort
jeśli potrzebujesz dodatkowej manipulacji zamówieniem.hg commit
naN
pliku MB wymaga około3 * N
MB pamięci RAM ihg update
wymaga około2 * N
MB pamięci RAM. Dotyczy to Mercurial 1.5 w systemie Linux.Odpowiedzi:
Tak, ekspansja globowania jest alfabetyczna.
Ze strony Bash
man
:źródło
ls -l [[:lower:]]
zamiastls -l [a-z]
.mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]
. Plik „z” jest wymieniony tylko na sekundę,ls
ponieważ żąda pojedynczych liter nazw plików. Pierwszyls
- ten bez zewnętrznych nawiasów kwadratowych - prosi o jednoznakowe nazwy plików z listy znaków „:”, „l”, „o”, „w”, „e” i „r”. W obu przypadkach najbardziej zewnętrzne nawiasy kwadratowe ograniczają wyrażenie w nawiasie, które zawiera znaki i klasy. W przypadku[[:lower:]]
wewnętrznych nawiasów kwadratowych, dwukropków i słowa nazwa klasy znaków. ...Jest to udokumentowane zachowanie
bash
, abyś mógł na nim polegać w swoich skryptach. Od dawna odnosi się to również do innych powłok kompatybilnych z Bourne'em ... choć mogą istnieć przypadki narożne dotyczące składania lub znaków innych niż alfanumeryczne.(Wynikowa lista
bash
będzie w prawie „ASCII-betical” --- z wyjątkiem tego, że małe i wielkie litery będą zestawiane razem, tak jakby nie było różnic, ale z małymi literami przed ich odpowiednikami wielkich liter. Wszystkie nie - alfabetyczne powinny być zestawiane w tej samej kolejności, w jakiej występują w ASCII).Jak zauważyli inni, może to być zaburzone przez ustawienia środowiska związane z językiem: ogólnie LANG, a dokładniej LC_COLLATE. W najbezpieczniejszym przypadku może być uruchamianie poleceń zależnych od kolejności globalnego uporządkowania w ramach
env
polecenia, aby wyczyścić środowisko (używając-i
lub,-u
w stosownych przypadkach) lub przepuścić wyniki,sort
aby zapewnić niezawodne sekwencjonowanie.źródło
Podczas gdy ekspansje glob są sortowane alfabetycznie, są one również zgodne z ustawieniami językowymi powłoki.
Pamiętaj, aby ustawić to na „C” w skrypcie, jeśli zamierzasz być przenośny.
źródło