Podemos juntar alguns comandos para fazer isso. Eu vou ter este exemplo escrever os arquivos renomeados para outro diretório, eles podem ser movidos de onde você gosta, mas eu pessoalmente gosto de mantê-los separados no caso de eu ter algumas falsas partidas.
mkdir renamed
for recovered in recup_dir.89/*xls; do
new_name=$(date +'%b-%d-%Y' -d "$(file "$recovered"| grep -Po 'Last Saved Time/Date:\K[^,]*')")
if [ -n "$new_name" ]; then
mv "$recovered" "renamed/$new_name.xls"
fi
done
isto fará um loop sobre todos os arquivos xls no diretório (já que esta informação não estará na saída de todos os arquivos). Para cada um deles, ele executará o comando file
e usará o regex de estilo perl do GNU grep para encontrar onde Last Saved Time/Date:
aparece e obter apenas o tempo depois disso. Em seguida, usaremos o comando date
para reformatar esse horário exatamente como você deseja, para que não seja necessário fazer muita manipulação de campos individuais na saída.
Isso nos dará uma data do formato Oct-19-2015
e, em seguida, usaremos esse valor no comando mv
, como seria de esperar, mas apenas se realmente tivermos uma data de volta. Se não receber algo de volta, não tente renomear o arquivo (apenas no caso das coisas nem sempre funcionarem da maneira correta com a cadeia de comandos anterior).