Eu preciso renomear arquivos em massa mudando .-.
para.
objetivo: file.-.txt
agorafile.txt
rename 's/.-./.' *.txt
Não funciona. O que há de errado?
Eu preciso renomear arquivos em massa mudando .-.
para.
objetivo: file.-.txt
agorafile.txt
rename 's/.-./.' *.txt
Não funciona. O que há de errado?
Você não está usando a versão perl de
rename
, porque se estivesse, teria recebido o erroSubstitution replacement not terminated at (eval 1) line 1.
devido à falta de trilha/
na expressão de substituição.Portanto, você precisa usar a sintaxe para o "outro"
rename
Nesta instância específica, você realmente não precisa citar os padrões de origem e destino, pois eles não têm caracteres shell glob (
*
, etc.), mas é uma boa prática, então fiz isso aqui de qualquer maneira.Remova um ou ambos
-v
(verbose) e-n
(sem ação) quando estiver feliz por ter algo que funciona para sua situação. Adicione a-a
opção de substituira
todas as ocorrências de.-.
por.
, por exemplo, para renomearfoo.-.bar.-.txt
parafoo.bar.txt
em vez defoo.bar.-.txt
(cuidado, ele ainda renomeiafile.-.-.txt
parafile.-.txt
) ou-l
para substituir al
ocorrência ast.Para os curiosos, o
rename
comando tomous/.-./.
(sim, aqueles sete caracteres literais) como padrão de origem e o primeiro nome de arquivo correspondente do*.txt
glob como padrão de destino. Em seguida, ele tentou combinar o padrão de origem com cada um dos arquivos restantes do*.txt
glob. Obviamente, isso não corresponderia a nenhum e, como não houve erro sintático, nenhuma mensagem foi emitida.Embora eu concorde com @roaima provavelmente não é uma das
perl
variantes baseadas em perl, com as variantes baseadas em perl, a sintaxe para isso seria:Para substituir todas as ocorrências de
.-.
com.
em todos os nomes de arquivo (não ocultos) que terminam em.txt
. Isso mudaria o nome-a-b.-.-.c.-.-.txt
com ,-a-b.c.txt
por exemplo.s/.-././g
iria renomeá-lo para-..-.c.-.txt
como.
é um operador regexp que corresponde a qualquer caractere e precisa ser escapado para que corresponda a um literal.
.s/\.-\././g
renomearia para-a-b.-.c.-.txt
.E, claro, o
./
prefixo importante sem o qual você introduz vulnerabilidades de injeção de comando em algumas variantes dorename
.Para todos os tipos de renomeação, prefiro
zsh
'szmv
, pois não tem a maioria dos problemas e incompatibilidades com todas asrename
variantes e faz algumas verificações de sanidade antes.Ou
Para substituir apenas o
-.-
antestxt
por.
.O que há de errado com
rename 's/.-./.' *.txt
/
na parte de trás