Короткое (и несколько быстрое )решение :Добавляя индекс массива к именам файлов и сортируя их, мы можем позже создать отсортированную версию на основе отсортированных индексов.
Для этого решения нужны только встроенные модули bash, а также двоичный файл sort
, а также оно работает со всеми именами файлов, которые не содержат символ новой строки \n
.
index=0 sortedfilearray=()
while read -r line ; do
sortedfilearray+=("${filearray[${line##* }]}")
done <<< "$(for i in "${filearray[@]}" ; do
echo "$(basename "$i") $((index++))"
done | sort -n)"
Для каждого файла мы повторяем его базовое имя с добавлением начального индекса следующим образом:
0010.pdf 0
0003.pdf 1
0040.pdf 2
и затем отправлено через sort -n
.
0003.pdf 1
0010.pdf 0
0040.pdf 2
Затем мы перебираем выходные строки, извлекаем старый индекс с расширением переменной bash ${line##* }
и вставляем этот элемент в конец нового массива.