Renomeia os últimos 8 caracteres no nome do arquivo

3

Estou recebendo arquivos de vídeo com nomes diferentes, mas os oito caracteres finais de todos são números (também diferentes a cada vez). Este é o padrão do nome do arquivo:

custom text 00030402.avi

Eu tenho que fazer com que o nome do arquivo seja assim:

00\:03\:04\:02

Então, minha pergunta é como renomear os últimos 8 caracteres e preservá-los para alcançar esse padrão.

    
por ispasov 28.09.2013 / 06:39

3 respostas

4

Usando rename (aquele de perl às vezes chamado de prename , não de util-linux ):

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1:$2:$3:$4/'  *.avi

Isso renomearia um nome de arquivo como custom text 00030402.avi to custom text 00:03:04:02.avi .

Se você barra invertida no nome do arquivo (antes do : ), diga:

rename 's/(\d{2})(\d{2})(\d{2})(\d{2})/$1\:$2\:$3\:$4/' *.avi

Para remover o texto personalizado dos nomes de arquivo, diga:

rename 's/.* (\d{2})(\d{2})(\d{2})(\d{2})(.*)/$1\:$2\:$3\:$4$5/' *.avi
    
por 28.09.2013 / 07:47
2

com zsh :

$ autoload zmv
$ zmv -v '(*)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi custom\ text\ 00\:03\:04\:02.avi

(- v para verbose). Para remover o texto personalizado :

$ zmv -v '*(??)(??)(??)(??).avi' '$1\:$2\:$3\:$4.avi'
mv -- custom\ text\ 00030402.avi 00\:03\:04\:02.avi
    
por 28.09.2013 / 07:39
1

Aqui está uma maneira de fazer isso com o look regex do Perl:

perl -e '
    while($name=shift){
        @components = split /(?=(?:[0-9]{2})+[^0-9]+$)/,$name;
        shift @components;
        $new_name = join '\:',@components;
        rename $name => $new_name;
    }
' list_of_avi_files

Isso funcionará para qualquer número de pares de dígitos, não apenas para 4. Você também pode alterar {2} para {3} , por exemplo, e dividi-lo em triplos de dígitos.

    
por 28.09.2013 / 08:17