Renomeando arquivos em uma pasta (e subpastas) removendo um token no nome do arquivo

0

Eu tenho uma quantidade enorme de arquivos em uma pasta (e subpastas) que eu preciso renomear. Por exemplo, eu tenho:

movie1.mp4
fixed_movie1.mp4
...

O que eu preciso é renomear fixed_movie1.mp4 para movie1.mp4 (sobrescrevendo o arquivo original).

O que eu tenho até agora:

TARGET_FILES=$(find /path/to -type f -name=*.mp4)
for f in $TARGET_FILES
do
  <some commands>
done

Eu sei usar sed (não muito, eu admito!), mas eu tenho problema em usá-lo, porque o token fixed_ não está sempre no começo da string (olhando as subpastas adicionam ao caminho).

Qualquer ajuda seria apreciada!

    
por stzzz1 13.06.2014 / 17:38

1 resposta

1

Não é necessário usar sed . Bash pode fazer expansão de parâmetro:

for f in $TARGET_FILES ; do
    mv $f ${f/fixed_}
done

Se os nomes dos seus arquivos contiverem espaços, você deve ser mais cuidadoso. Crie um script para renomear um arquivo

#!/bin/bash
for f in "$@" ; do
    mv "$f" "${f/fixed_}"
done

E corra

find /path/to -type f -name=*.mp4 -exec /path/to/script.sh {} +

Se + não for suportado em sua versão de find , você poderá remover o loop do script e renomear os arquivos um por um usando \; .

(Se o seu find suportar a opção -execdir , você poderá usá-lo para evitar situações em que o próprio caminho contenha fixed_ ).

    
por 13.06.2014 / 17:46