Как изменить метод сортировки файлов, используемый звездочкой (*) в bash?

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

Я считаю, что звездочка ( * ) полезна для запуска команды для всех файлов в каталоге следующим образом:

 $ stat -x * 

но это сортирует файлы в алфавитном порядке, есть ли способ достичь той же функции, но начиная с файла с самой ранней датой изменения?

РЕДАКТИРОВАТЬ: я имею в виду «самый ранний» в человеческом смысле, самый старый файл.

Предполагая инструменты GNU, вам придется сделать что-то вроде

 find . -maxdepth 1 -name '*ASD*' -printf '%T@\t%p\0' | sort -z -k1.1n | while IFS=$'\t' read -rd '' mtime name; do # do something with the filename echo ">>>$name" done 

Дополнительные обручи должны обрабатывать любые мыслимые имена файлов, например те, которые содержат символы новой строки.

Чтобы инкапсулировать это в функцию, я бы написал:

 files_by_mtime () { local pattern=$1 local -n arr=$2 arr=() while IFS=$'\t' read -rd '' mtime name; do arr+=("$name") done < <( find . -maxdepth 1 -name "$pattern" -printf '%T@\t%p\0' | sort -z -k1.1n ) } files_by_mtime '*' myarr for file in "${myarr[@]}"; do # do something with the filename echo ">>>$file" done 

Требуется Баш версии 4.3+

ls -tr отсортирует файлы в текущем каталоге по ls -tr раннему времени мода.