O Linux Bulk renomeia arquivos e diretórios de mídia para colocar parênteses por volta do ano no final do nome do arquivo e do diretório

0

Eu tenho vários arquivos de vídeo em casa em diretórios diferentes que têm um ano no final do nome do diretório para indicar o ano em que o vídeo foi filmado. Também está no final dos nomes de arquivos nesse diretório e antes da extensão. Eu quero colocar parênteses por volta do ano.

Alguns arquivos e diretórios também podem ter um ano (ou números que parecem um ano) no nome do arquivo em outras posições, mas eu só quero colocar parênteses por volta do ano no final. Por exemplo, aqui está um dos diretórios:

Videos/Xmas 2004 - Time To Go 2004

contém:

Xmas 2004 - Time To To 2004.mp4  
Xmas 2004 - Time To Go 2004.txt  
Xmas 2004 - Time To Go 2004.readme  

Eu quero renomear em massa todos os meus arquivos de mídia para terminar com este sistema de nomes:

Videos/Xmas 2004 - Time To Go (2004)

contém

Xmas 2004 - Time To To (2004).mp4  
Xmas 2004 - Time To Go (2004).txt  
Xmas 2004 - Time To Go (2004).readme

Como faço isso? Eu posso usar o comando "find" para obter os arquivos e diretórios:

find /home/user/Videos/ -iname "* [1-2][0-9][0-9][0-9]"    # Find directories
find /home/user/Videos/ -iname "* [1-2][0-9][0-9][0-9].*"  # Find files

Eu estou querendo saber como eu posso usar o "-exec {} \". estrutura para usar o comando rename ou mv (ou sed ou awk) ou eu escrevo um script bash para manipular a string filename e colocar isso no "-exec {} \;"

    
por Peter Freeman 21.12.2016 / 05:24

1 resposta

0

Este script imprimirá os comandos mv necessários para stdout . Você deve salvá-los em um arquivo ( sh script > file ) e inspecioná-los. Se você achar que eles são seguros para executar, então você pode executar os comandos no arquivo ( sh file ). Ou você pode alterar print para system no próprio script.

find $1 -type f > /tmp/to_rename
find $1 -type d >> /tmp/to_rename
perl -lne '
    $re = qr/([12]\d\d\d)(\.\w*)?$/;
    if (/$re/) {
        $old = $_;
        s/$re/()/;
        print("mv \"$old\" \"$_\"");
    }
' /tmp/to_rename
    
por 21.12.2016 / 06:33