
Atualmente estou classificando arquivos que recuperei de um sistema de arquivos quebrado. Agora todos eles têm nomes de arquivos mais ou menos assim: f123123123.xls
Se eu executar: arquivo "f123123123.xls", ele me fornecerá muitas informações e às vezes até a última data salva.
Exemplo:
./recup_dir.89/f111841280.xls: Documento Composite Document File V2, Little Endian, Os: Windows, Versão 1.0, Página de código: -535, Número de revisão: 5, Tempo total de edição: 09:58:37, Última impressão: Quarta, 9 de setembro, 11:57:04 de 2015, hora/data de criação: quinta, 3 de setembro, 03:15:36 de 2015, última hora/data salva: segunda, 19 de outubro, 14:28:03 de 2015
Como posso selecionar a última data salva e usá-la para renomear meu arquivo para algo como: Oct-19-2015.xls ?
Responder1
Podemos agrupar alguns comandos para fazer isso. Vou fazer com que este exemplo grave os arquivos renomeados em outro diretório, eles podem ser movidos para onde você quiser, mas eu pessoalmente gosto de mantê-los separados, caso haja algumas partidas falsas.
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
isso fará um loop em todos os arquivos xls no diretório (já que essas informações não estarão na saída de todos os arquivos). Para cada um, ele executará o file
comando e usará o regex de estilo perl do GNU grep para descobrir onde Last Saved Time/Date:
aparece e obterá o tempo depois disso. Em seguida, usaremos o date
comando para reformatar esse horário exatamente como você deseja, para que não precisemos fazer muita manipulação de campos individuais na saída.
Isso nos dará uma data do formato Oct-19-2015
e então usaremos esse valor no mv
comando, como seria de esperar, mas apenas se realmente obtivermos uma data anterior. Se não obtiver algo em troca, não tente renomear o arquivo (caso as coisas nem sempre funcionem da maneira certa com a cadeia de comandos anterior).