Altera a extensão de todos os nomes de arquivos que contêm uma string específica

0

Quando eu obtenho um arquivo cujo nome contém a string "x264", desejo alterar sua extensão para ".mp4" (por motivos muito detalhados para explicar aqui). Exemplos:

Seinfeld_S02E05_x264.mkv - > Seinfeld_S02E05_x264.mp4

Seinfeld_S02E05_x264.avi - > Seinfeld_S02E05_x264.mp4

Qual script posso usar para fazer essa alteração automaticamente? Meu computador é um servidor NAS4FREE executando o FreeBSD 11.1

UPDATE (após a resposta de Jeff): Esqueci de mencionar que eu quero que isso funcione no diretório designado e em todos os seus subdiretórios. Talvez um comando em vez de um script?

    
por Jim 18.04.2018 / 12:30

2 respostas

0

Usando find :

find -type f -name "*x264*" -execdir sh -c 'echo mv -n "$1" "${1%.*}.mp4"' _ {} \;

A opção -n impedirá que mv substitua os arquivos existentes como o nome dado dos arquivos de amostras renomeados para o nome de arquivo único e, nesse caso, você está excluindo o primeiro arquivo.

Para obter este trabalho em arquivos sem extensões (sufixo):

find -type f -name "*x264*" -execdir sh -c 'file="${1#./}"; 
    echo mv -n "$file" "${file%.*}.mp4"' _ {}  \;

remova echo acima para se livrar do dry-run e execute renomear nos arquivos.

    
por 19.04.2018 / 16:53
2
for f in *x264*.*
do
  mv -- "$f" "${f%.*}".mp4
done

O exemplo acima executa um loop de shell sobre um padrão "glob" que localiza arquivos com "x264" em seu nome de arquivo antes de algum tipo de extensão (para que haja uma extensão para renomear mais tarde); uma vez que tenha essa lista de arquivos, ele chama mv para fazer a renomeação e usa a expansão de parâmetro para remover a extensão (período seguido por qualquer coisa * ) e então anexa manualmente a extensão .mp4 .

    
por 18.04.2018 / 13:03

Tags