lote renomeia alguns arquivos [duplicado]

0

Eu tenho alguns arquivos que desejo renomear em um único comando. Os arquivos são nomes assim . Eu quero o bit Posthumus E S removido dos nomes e também o 01, 02 ... etc no início de cada arquivo. Como faço para remover isso?

    
por Papul 25.09.2012 / 19:01

2 respostas

4

É possível remover os prefixos de nome de arquivo usando apenas bash . Observe que os nomes de arquivos resultantes podem colidir , por exemplo, se você tiver dois arquivos com o mesmo título da música. Daí a opção -i :

for f in *.mp3; do mv -i "$f" "${f#*Posthumus - }"; done
    
por 25.09.2012 / 20:49
2
rename 's/\d\d\s-\s[ .A-Za-z]+-\s//' *.mp3
01 - E.S. Posthumus - Ashielf Pi.mp3 renamed as Ashielf Pi.mp3
02 - E.S. Posthumus - Oraanu Pi.mp3 renamed as Oraanu Pi.mp3

Editar: Se por algum motivo você não tiver uma versão de rename instalada que faz o trabalho, você pode escrever facilmente a versão mínima do script em Perl, e executar isso . Isto é da FAQ Unix , e trabalha com o regex que eu forneci acima:

    #!/usr/bin/perl
    #
    # rename script examples from lwall:
    #       rename 's/\.orig$//' *.orig
    #       rename 'y/A-Z/a-z/ unless /^Make/' *
    #       rename '$_ .= ".bad"' *.f
    #       rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *

    $op = shift;
    for (@ARGV) {
        $was = $_;
        eval $op;
        die $@ if $@;
        rename($was,$_) unless $was eq $_;
    }
    
por 25.09.2012 / 19:44