Use o parâmetro -n
para executar rename
em um modo de execução seca que é muito útil quando você deseja testar seu padrão:
martin@martin ~ % rename -n s/list/list.disable/g /etc/apt/sources.list.d/*.list | sed 's/renamed as/\n =>/g'
[...]
/etc/apt/sources.list.d/spotify.list
=> /etc/apt/sources.list.disable.d/spotify.list.disable
/etc/apt/sources.list.d/steam.list
=> /etc/apt/sources.list.disable.d/steam.list.disable
[...]
O erro óbvio aqui é que o padrão list
corresponde a sources.list.d
, então você está tentando renomear a pasta e seus arquivos contidos.
Use este padrão:
rename -n 's/\.list$/.list.disable/' /etc/apt/sources.list.d/*.list | sed 's/renamed as/\n =>/g'
[...]
/etc/apt/sources.list.d/spotify.list
=> /etc/apt/sources.list.d/spotify.list.disable
/etc/apt/sources.list.d/steam.list
=> /etc/apt/sources.list.d/steam.list.disable
[...]
As diferenças são:
-
A citação de
.
no padrão de pesquisa como\.
garante que o ponto corresponda apenas a um ponto real e não a qualquer caractere (é o que um ponto sem aspas geralmente faz em um regex). -
A lista
$
after significa "fim da string". Ele garante que apenas a ".list" no final do nome do arquivo corresponda e seja substituída, não uma ".list" que esteja em algum outro lugar no caminho ou no nome do arquivo. -
Você não precisa citar o ponto na string de substituição; ".list.disable", portanto, funciona sem barras invertidas, porque o
.
não tem mais um significado especial. -
Observe também que citei o regex entre aspas simples para impedir que o shell o modifique de alguma forma.