Гарантируется ли расширение подстановочного знака в Bash в алфавитном порядке? Я вынужден разбить большой файл на 10 Мбайт, чтобы они могли быть приняты моим репозиторием Mercurial.
Я подумал, что смогу использовать:
split -b 10485760 Big.file BigFilePiece.
а затем вместо:
cat BigFile | bigFileProcessor
Я мог бы сделать:
cat BigFilePiece.* | bigFileProcessor
на своем месте.
Тем не менее, я не смог найти нигде, который гарантировал бы, что расширение звездочки (или подстановочный знак, или иначе *
) всегда будет в алфавитном порядке, так что это .aa
было раньше .ab
(в отличие от порядка меток времени или что-то в этом роде).
Кроме того, есть ли недостатки в моем плане? Насколько велика производительность при cat
объединении файла?
bash
files
wildcard
large-data
санки
источник
источник
sort
если вам нужны какие-либо дополнительные манипуляции с заказами.hg commit
дляN
файла в МБ требуется около3 * N
МБ ОЗУ иhg update
требуется около2 * N
МБ ОЗУ. Это с Mercurial 1.5 на Linux.Ответы:
Да, расширение globbing является алфавитным.
Со
man
страницы Bash :источник
ls -l [[:lower:]]
вместоls -l [a-z]
.mkdir lctest; cd lctest; touch w; touch z; ls -l [:lower:]; echo =====; ls -l [[:lower:]]
. Файл "z" перечисляется только вторым,ls
потому что он запрашивает строчные буквы из однобуквенных имен файлов. Первыйls
- без внешних квадратных скобок - запрашивает односимвольные имена файлов из списка символов «:», «l», «o», «w», «e» и «r». В обоих случаях крайние квадратные скобки ограничивают выражение в скобках, в котором перечислены символы и классы. В случае[[:lower:]]
, внутренние квадратные скобки, двоеточия и слово называют класс символа. ...Это документированное поведение,
bash
поэтому вы можете зависеть от него в своих скриптах. Это также верно в отношении других совместимых с Bourne оболочек в течение очень долгого времени ... хотя могут быть угловые случаи, касающиеся свертывания регистра или не алфавитно-цифровых символов.(Результирующий список
bash
будет в почти "ASCII-бетическом" порядке - за исключением того, что строчные и прописные буквы будут сопоставляться вместе, как если бы не было различий в регистре, но с разбором в нижний регистр перед их эквивалентами в верхнем регистре. -алфавитные буквы должны сопоставляться в том же порядке, в котором они указаны в ASCII).Как уже отмечали другие, это может быть нарушено настройками вашей языковой среды: LANG в целом и LC_COLLATE более конкретно. Может быть безопаснее всего запускать команды, которые зависят от упорядочения глобальных расширений под
env
командой для очистки среды (с использованием-i
или-u
в зависимости от ситуации) или для передачи результатов,sort
чтобы обеспечить надежную последовательность.источник
В то время как расширения глобуса сортируются в алфавитном порядке, они также подчиняются настройке языка оболочки.
Убедитесь, что в вашем скрипте установлено значение «C», если вы хотите, чтобы это было переносимо.
источник