Renomear nomes de arquivos com base em um padrão no Linux

1

Eu tenho muitos dados com nomes de arquivos como este:

combination.2005.0801.txt
combination.2005.0802.txt 
...
combination.2005.0830. txt

O que devo fazer se eu quiser renomear esses arquivos para ficar assim?

20100801.txt  
20100802.txt
...
20100803.txt

Eu já tentei usar o seguinte script, mas infelizmente o script não está funcionando.

rename 's/combination.(.*).(.*).txt/$1.txt/' *.txt
    
por ahmad 19.03.2014 / 08:21

2 respostas

0

Ao usar expressões regulares compatíveis com Perl (ou mais genéricas), você deve ter em mente que . corresponderá a qualquer caractere; não apenas períodos (mas também apenas um caracter a menos que haja um quantificador).

O seguinte não foi testado, mas provavelmente tentarei usar essa solução com base nesta pergunta e respostas :

$ for old in ./combination*.txt; do
    new=$(echo $old | sed -r 's/combination\.([[:digit:]]+)\.([[:digit:]]+)\.txt$/\1\2.txt/')
    mv -v "$old" "$new"
  done

Tenha em mente que isso não foi testado e pode ser interrompido. Você também pode usar echo em vez de mv para testar a coisa toda primeiro. :)

    
por 19.03.2014 / 08:34
-1
$ for i in combination*.txt; do
   mv $i $(echo $i | awk -F\. '{print $2$3"."$4}'); 

done
    
por 03.04.2014 / 23:32