Назад | Перейти на главную страницу

Какой по умолчанию порядок «для f в каталоге / *»?

Я хотел знать, перебирать ли файлы в каталоге с

for f in directory/*

будет иметь некоторый порядок обработки записей по умолчанию (имя файла, дата создания и т. д.?), или он недетерминирован?

Наверное, это очевидно, но я не смог найти информацию.

directory/* сначала расширяется оболочкой (обычно bash). Бег echo directory/* отобразит все совпадающие файлы, и bash сначала отсортирует эти совпадающие элементы лексикографически, прежде чем передавать их в качестве аргументов в echo, который затем их печатает.

В случае запуска ls directory/*, то directory/* сначала расширяется оболочкой, а затем представляется в виде списка аргументов для ls. Заказ, который ls затем используется для вывода файлов в зависимости от предоставленных ему необязательных аргументов, которые позволяют выводить список файлов на основе альтернативных критериев, таких как размер, время изменения и т. д., но эта сортировка выполняется внутри ls двоичный файл, после того, как ему был передан лексикографически отсортированный расширенный список аргументов из оболочки bash.

Порядок будет в лексикографическом порядке (в алфавитном порядке). Это будет точно так же, как то, что вы увидите, если наберете ls directory/* в приглашении оболочки Bash.

Если вы хотите отсортировать по времени модификации, вы можете использовать ls -t. Видеть man ls для других вариантов сортировки.