oldIFS="$IFS"; IFS=$'\n'
if [[ -o noglob ]]; then
setglob=1; set -o noglob
else
setglob=0
fi
sorted=( $(printf '%s\n' "${filearray[@]}" |
awk '{ print $NF, $0 }' FS='/' OFS='/' |
sort | cut -d'/' -f2- ) )
IFS="$oldIFS"; unset oldIFS
(( setglob == 1 )) && set +o noglob
unset setglob
Сортировка имен файлов с новой строкой в именах вызовет проблемы на шаге sort
.
Он генерирует список с разделителями/
-с awk
, который содержит базовое имя в первом столбце и полный путь в качестве остальных столбцов:
0003.pdf/dir2/0003.pdf
0010.pdf/dir1/0010.pdf
0040.pdf/dir3/0040.pdf
Это то, что сортируется, и cut
используется для удаления первого столбца с разделителями /
-. Результат превращается в новый массив bash
.