Você precisaria de 2 arrays, indexe-os por um número no primeiro passo: primeiro receberá nomes, segundos tamanhos; em seguida, indexe-os por um número (de 0 a number_of_files - 1) novamente na segunda passagem, ao fazer as exclusões.
Estou me deparando com um problema estranho com matrizes associativas no bash.
Eu tenho os seguintes arquivos em um diretório:
ls -lart
drwxr-xr-x. 3 root root 4096 Feb 9 11:14 ..
-rw-r--r-- 1 root root 3275 Feb 9 14:16 1.txt
-rw-r--r-- 1 root root 3275 Feb 9 14:16 2.txt
-rw-r--r-- 1 root root 3275 Feb 9 14:16 3.txt
-rw-r--r-- 1 root root 0 Feb 12 15:19 a.txt
-rw-r--r-- 1 root root 0 Feb 12 15:19 123.txt
drwxr-xr-x 2 root root 4096 Feb 12 15:19 .
Os arquivos são listados do mais antigo para o mais recente.
-Enviou a saída de ls -lart para um arquivo com o seguinte comando:
ls -lart --block-size=K /test |grep txt |awk '{print $9,$5}' > /tmp/filestodel.txt
filestodel.txt tem a lista de arquivos (com tamanho associado) do mais antigo ao mais recente:
cat /tmp/filestodel.txt
1.txt 4K
2.txt 4K
3.txt 4K
a.txt 0K
123.txt 0K
onde a primeira coluna tem o nome do arquivo e a segunda o tamanho (em Kbytes)
-Eu defino uma matriz e insiro essas entradas:
declare -A cleanup
while read line
do
filetodelname=$(echo $line | awk {'print$1'});
filetodelsize=$(echo $line | awk {'print$2'});
cleanup[$filetodelname]=$filetodelsize
done < /tmp/filestodel.txt
a idéia é deletar os arquivos listados no array do mais antigo (primeiro) ao mais novo, o que se traduziria em começar a deletar o arquivo 1.txt conforme a saída ls -lart acima.
A questão é que quando eu percorro as chaves:
for K in "${!cleanup[@]}"; do echo $K; done #print filenames
Eu recebo esta saída:
2.txt
3.txt
123.txt
1.txt
a.txt
que está claramente confuso!
Como posso manter a ordem original dos arquivos na matriz?
Obrigado dom
Tags bash linux hashing bash-scripting array