Renomear lote usando Regex, mas mantendo algumas substrings

Renomear lote usando Regex, mas mantendo algumas substrings

Pesquisei bastante antes de fazer essa pergunta. Encontrei links diferentes para renomear em lote usando regex como este e outros semelhantes:

*Baseado em padrão, renomeação de arquivo em lote no terminal

Meu problema é o seguinte: quero renomear em lote usando Regex, mas meu código não funciona.

Eu tenho dentro de uma pasta arquivos diferentes com nomes assim:

name_house_1_door.jpg
name_house_2_door.jpg
name_house_3_door.jpg
name_house_4_door.jpg

E eu quero renomear os arquivos assim:

name_house_1.jpg
name_house_2.jpg
name_house_3.jpg
name_house_4.jpg

O código que mais se aproxima do que eu quero foi:

$  rename -v 's/house\_[0-9]\_door/house_[0-9]/'

Mas como você deve saber, o primeiro arquivo foi renomeado como: name_house_[0-9].jpg

Responder1

Uma maneira muito mais fácil seria simplesmente excluir _doorusando renomear:

rename -v 's/_door//' *

Isso procura _doore substitui por nada, essencialmente excluindo-o.

Responder2

  1. Você está escapando do sublinhado no lado de pesquisa da expressão e não deveria.
  2. Você precisa de uma subpesquisa (os números) e de um espaço reservado para armazenar e usar o resultado da subpesquisa.

Adicionar parênteses em torno de [0-9] criará a subpesquisa necessária. Como é a primeira subpesquisa, pode ser chamada de $1 no lado da substituição. O resultado segue..

rename -v 's/house_([0-9])\_door/house_$1/' *

Espero que isto ajude.

Responder3

Você precisa usarreferências anteriores. As classes de caracteres não significam nada na expressão de substituição. Na verdade, poucos caracteres têm significados especiais na expressão de substituição. Suponho que algo como:

rename -v 's/house_([0-9])_door/house_$1/'

(ou)

rename -v 's/(house_[0-9])_door/$1/'

Além disso, use o -nsinalizador para ver quais renomeações acontecerão antes de realizá-las.

Responder4

Isso funciona em Fish Shell

for file in *.jpg;  
    mv -n $file (basename $file _door.jpg).jpg; 
end

informação relacionada