Selecione uma parte específica da saída e use-a para renomear arquivos

Selecione uma parte específica da saída e use-a para renomear arquivos

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 filecomando 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 datecomando 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-2015e então usaremos esse valor no mvcomando, 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).

informação relacionada