Проблема:
Необходимо отсортировать массив, прежде чем работать с ним с помощью функции.
Сначала массив загружается с файлами:
unset a i
counter=1
while IFS= read -r -d $'\0' file; do
a[i++]="$file"
done < <(find $DIR -type f -print0)
Далее каждый член массива отправляется в функцию
for f in "${a[@]}"
do
func_hash "$f"
[ $(expr $counter % 20) -eq 0 ] && printf "="
counter=$((counter + 1))
done
Каким-то образом необходимо добавить сортировку в цикл for. Посмотрел
через SO сообщения о сортировке массивов, но как-то мои сумасшедшие имена файлов
вызывают проблемы, когда я пытаюсь использовать сортировку.
Идеи
Спасибо!
Bubnoff
ОБНОВЛЕНИЕ: Вот код с сортировкой:
while IFS= read -r -d $'\0' file; do
func_hash "$file"
[ $(expr $counter % 20) -eq 0 ] && printf "="
counter=$((counter + 1))
done < <(find $DIR -type f -print0 | sort -z +1 -1)
Это сортировка по полному пути, а не по имени файла. Любые идеи о том, как
сортировать по имени файла, учитывая, что путь необходим для функции?
ОБНОВЛЕНИЕ 2: Решено пойти на компромисс.
Моей главной целью было избежать временных файлов с помощью сортировки. GNU sort может написать обратно в оригинал
файл с параметром -o, так что теперь я могу:
sort -o $OUT -t',' -k 1 $OUT
У любого есть более «элегантное» решение (что бы это ни значило).
решено См. Ответ jw013 ниже. Спасибо мужчина!