Substituir uma extensão de arquivo dinâmico por uma extensão de arquivo fixa

2

Eu preciso substituir as extensões de arquivos dinâmicos que contêm registro de data e hora para uma determinada data com uma extensão de arquivo fixa.

Por exemplo,

08242016G0040156.ZIP.20160907141452  
09042016SHOC0003.ZIP.20160904044504 

Eu preciso que eles sejam substituídos por 08242016G0040156.ZIP e 09042016SHOC0003.ZIP respectivamente.

    
por stackFan 06.01.2017 / 12:46

3 respostas

3

Com o bash, um loop simples com alguma manipulação de string

for f in ./*.ZIP.*
do
   mv "$f" "${f%.*}"
done

"${f%.*}" remove tudo após o último . (inclusive) na string em $f .

    
por 06.01.2017 / 12:53
1
for filename in $(find . -name '*ZIP*'); do mv $filename $(echo $filename | sed 's|\(.*\)\.ZIP.*|.ZIP|g') ; done
    
por 06.01.2017 / 12:58
1

Com o comando perl based rename :

$ touch 08242016G0040156.ZIP.20160907141452 09042016SHOC0003.ZIP.20160904044504

$ rename -n 's/\.\d+$//' *ZIP*
rename(08242016G0040156.ZIP.20160907141452, 08242016G0040156.ZIP)
rename(09042016SHOC0003.ZIP.20160904044504, 09042016SHOC0003.ZIP)
A opção

-n é para execução a seco. Se a renomeação estiver correta, remova-a para uma renomeação real


Se os arquivos puderem estar em vários subdiretórios, use find

find -name '*ZIP*' -exec rename -n 's/\.\d+$//' {} +


Se houver caracteres diferentes de dígitos após o último . use

rename -n 's/\.[^.]+$//' *ZIP*
    
por 06.01.2017 / 13:31