Estou escrevendo um script bash para procurar um arquivo que tenha nome de arquivo mais recente e um nome de arquivo como:
...
Wed_Dec_30_16:47:41_PHT_2015.zip
Wed_Dec_30_16:00:41_PHT_2015.zip
Wed_Dec_30_16:00:41_PHT_2015.zip
Thu_Dec_31_16:49:14_PHT_2015.zip
...
Eu estou procurando todo o arquivo .zip use o comando find
e eu pensei que talvez eu precisasse de um array como:
readarray -t lines <<< "$(find . -type f -name '*.zip' -exec basename {} \;|tr -d '[.zip]'|tr '_' ' ')"
len=${#lines[@]}
for ((i=0;i<len;i++)); do
echo ${lines[$i]}
done
E eu tenho todo o nome do arquivo (com data e hora) como este no terminal. parece completamente:
Wed Dec 30 16:47:41 PHT 2015
Wed Dec 30 16:00:35 PHT 2015
Thu Dec 31 12:14:13 PHT 2015
Thu Dec 31 12:19:34 PHT 2015
Wed Dec 30 16:49:14 PHT 2015
Thu Dec 31 13:01:11 PHT 2015
Mon Dec 28 12:35:44 PHT 2015
...
Mas, não sei como posso comparar esses muitos string
ao usar date
.
E, com certeza, não tenho certeza se essa é uma maneira realmente correta de reverter o arquivo, que é uma string como Wed Dec 30 16:49:14 PHT 2015
to Wed_Dec_30_16:49:14_PHT_2015.zip
Obrigado pela ajuda.
Editar:
Eu corrijo meu script e faço a comutação 'string' para 'date', que é o segundo nível:
declare -a my_array
len=${#lines[@]}
for ((i=0;i<$len;i++));do
my_array[$i]='date -d "${lines[$i]}" +%s'
done
e escolha o máximo:
max=${my_array[0]}
for((i=0;i<$len;i++));do
if [ ${my_array[$i]} -gt $max ];then max=${my_array[$i]};fi
done
echo $max
terminal:
1451465261
1451462435
1451535253
1451535574
1451465354
1451538071
1451277344
1451538071 <== max one
Então, devo reverter como: Wed_Dec_30_16:00:41_PHT_2015.zip
?
Alguém tem um jeito simples?