É claro que perdi a parte de classificação da pergunta. Para responder a isso, proponho um modelo diferente que é mais simples em alguns aspectos:
ls */IMPORT_ME.txt | cut -d/ -f 1 | date --file=- +%s | sort -n | sed -e 's/^/@/' \
| while read DATE
do
FILENAME='date -d ${DATE} +%-d%b%Y/IMPORT_ME.txt'
REPLACEMENT='date -d ${DATE} +%-d %b %Y'
import_file.sh ${FILENAME}
cat rerun_import_file.tmpl | sed -e "s/XXX/${REPLACEMENT}/g" > rerun_import_files.sql
$ISQL -i rerun_import_files.sql
done
A chave aqui é a conversão inicial de todos os nomes de diretórios (filtrados para validade) para um formato de hora classificável (neste caso, época Unix 'epoch'), classificando-os e convertendo-os de volta (para duas formas diferentes) ).
Se você está trabalhando com datas em mais do que um simples sentido de manipulação de strings, eu recomendo strongmente ler a página de manual para 'data'. De fato, leia-o duas vezes, pense bem sobre isso e leia-o novamente. 'date' é um comando extremamente poderoso em seu domínio.
Ah, e espero que a lição que você aprendeu com essa experiência seja que você deve SEMPRE usar datas no formato ISO ( date -Iseconds
ou date -I
para exemplos). As datas de formato ISO classificam-se bem como sequências de caracteres usando, por exemplo, %código%.