Como renomear em lote arquivos e converter datestamp de DD-MM-AAAA para AAAA-MM-DD?

0

Estou tentando renomear uma pasta com arquivos que contenham um registro de data assim:

string_DD-MM-YYYY_hhmm.pdf

para este formato:

string_YYYY-MM-DD_hhmm.pdf

para que eles classifiquem por data quando classificados por nome de arquivo.

Exemplo: PB_KAZ_KtoNr_0463266665_01-02-2014_0341.pdf deve se tornar PB_KAZ_KtoNr_0463266665_2014-02-01_0341.pdf .

Eu encontrei este pergunta semelhante mas é em relação ao formato DDMMYYYY em vez de DD-MM-AAAA e as respostas são complicadas para a minha situação. Como o string é sempre o mesmo em conteúdo e comprimento (24 caracteres), um comando simples, que divide e reagrupa a string por posições, seria suficiente.

Obrigado antecipadamente!

    
por Anton S. 07.01.2017 / 13:45

2 respostas

2

Com o rename do Perl (comando autônomo):

rename -n 's/(.*)_(.*)-(.*)-(.*)_(.*.pdf)/$1_$4-$3-$2_$5/' *.pdf

Se tudo parecer bem, remova -n .

    
por 07.01.2017 / 14:14
0

Este é um método bruto, especialmente se houver muitos arquivos, mas o mais básico é o awk:

Assume-se que você não possui nenhum outro pdf na pasta, exceto os caracteres string_DD-MM-YYYY_hhmm.pdf, e essa parte string_ tem 24 caracteres.

cd para a pasta e, em seguida, execute isto:

for i in *.pdf; do mv $i '\ls -1 $i | awk '{print substr ($0, 0, 24)}'''\ls -1 $i | awk -F[_.] '{print$(NF-1)}'| awk -F- '{print$3"-"$2"-"$1}''.pdf; done
    
por 07.01.2017 / 14:11