Se você tiver ksh93 (para as matrizes) e perl (para timestamp / stat), isso funcionará:
files=(*.xls)
# exit early if there are no matching files
[ "$files" = "*.xls" ] && exit 0
for index in ${!files[@]}
do
t[$index]=$(perl -e '$x=(stat(shift))[9]; print "$x"' "${files[index]}")
done
for i in ${!t[@]}
do
printf "%d %d\n" ${t[i]} $i
done | sort -rn | head -10 | while read t i
do
mv "${files[i]}" "${files[i]}-bkp"
done
Funciona coletando a lista de arquivos * .xls e, em seguida, faz um loop sobre esses arquivos, chamando o perl
one-liner para imprimir o último registro de data e hora de cada arquivo, salvando o resultado em um array paralelo t
.
Em seguida, faz um loop sobre t, imprimindo o registro de data e hora e o índice de array, direciona para sort
para obter os arquivos modificados mais recentemente, canaliza para head
para obter o top 10 e retorna sobre essa saída para chamar o comando mv
nos arquivos correspondentes.