Соответствует ли bash * файлы в алфавитно-цифровом порядке?


25

Я хочу объединить кучу файлов в порядке имен файлов.

Можно ли предположить, что это даст мне их в алфавитно-цифровом порядке?

cat * 

т.е. тот же порядок, который lsдает.

Ответы:


26

Краткий ответ: да, будет.

Со страницы руководства bash :

После разделения слов, если не установлена ​​опция -f (см. Построение набора), Bash сканирует каждое слово на наличие символов «*», «?» И «[». Если появляется один из этих символов, слово считается шаблоном и заменяется отсортированным по алфавиту списком имен файлов, соответствующих шаблону.


6
Обратите внимание, что «алфавитный» варьируется в зависимости от настроек локали (в частности $LC_COLLATE).
Гравитация

4
@grawity true, но результат будет тот же, что и lsв той же системе.
BloodPhilia

8

Краткий ответ - да, но вы должны знать, что, по его мнению, должен быть алфавитно-цифровой порядок, поскольку он может не соответствовать естественному порядку, который вы имеете в виду.

Например, запустите некоторый тест на то, как обрабатываются верхний и нижний регистр, чтобы выяснить в вашей системе, а также последовательности чисел.

Распространенная проблема, с которой я столкнулся при упорядочении списков файлов, возвращаемых глобусом, - нумерованные файлы. Мне часто дают файлы, пронумерованные как:

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

Тем не менее, глобус с использованием *не будет возвращать их в этом порядке, вместо этого вы получите что-то вроде:

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

Так что - чтобы избежать этой проблемы , вы будете должны сделать некоторые манипуляции на возвращаемом списке файлов или переименовывать файлы , так что однозначных цифр имеют ведущие нули (т.е. blah_01.txt, blah_02.txtи т.д.).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.