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

1

Atualmente estou classificando arquivos que recuperei de um sistema de arquivos quebrado. Eles agora todos os nomes de arquivos que são algo como isto: f123123123.xls

Se eu executo: arquivo "f123123123.xls", ele me fornece muitas informações e, às vezes, até uma última data salva.

Exemplo:

./recup_dir.89/f111841280.xls: Composite Document File V2 Document, Little Endian, Os: Windows, Version 1.0, Code page: -535, Revision Number: 5, Total Editing Time: 09:58:37, Last Printed: Wed Sep 9 11:57:04 2015, Create Time/Date: Thu Sep 3 03:15:36 2015, Last Saved Time/Date: Mon Oct 19 14:28:03 2015

Como posso selecionar a última data salva e usá-la para renomear meu arquivo para algo como: Oct-19-2015.xls?

    
por Joël Mettler 17.06.2016 / 14:51

1 resposta

0

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).

    
por 17.06.2016 / 15:35