Como acompanhamento da minha pergunta anterior , se eu tiver vários arquivos do formulário
sw.ras.001
sw.ras.002
sw.ras.003
…
Que comando posso usar para remover ras.
o meio de todos os arquivos?
Como acompanhamento da minha pergunta anterior , se eu tiver vários arquivos do formulário
sw.ras.001
sw.ras.002
sw.ras.003
…
Que comando posso usar para remover ras.
o meio de todos os arquivos?
ras
, ou seja, acabar comsw..001
ouras.
sairsw.001
?\.
os padrões.Respostas:
Você pode fazer isso com uma modificação bastante pequena de uma das respostas da última pergunta:
ou
Explicação:
rename
é umperl
script que utiliza umaperl
expressão regular e uma lista de arquivos, aplica a regex ao nome de cada arquivo e renomeia cada arquivo ao resultado da aplicação da regex. No nosso caso,ras
corresponde literalmente e\.
corresponde a um literal.
(já que.
sozinho indica qualquer caractere que não seja uma nova linha) e o substitui por nada.O
for
loop pega todos os arquivos que começam comsw.ras.
(shell shell padrão) e os fazem um loop sobre eles.${var/search/replace}
pesquisas$var
parasearch
e substitui a primeira ocorrência comreplace
, então${file/ras./}
retorna$file
com o primeiroras.
removidos. O comando renomeia o arquivo com o mesmo nome menosras.
. Observe que, com essa pesquisa e substituição,.
é interpretado literalmente, não como um caractere especial.fonte
Outra opção é usar mmv (MoVe em massa e renomear):
Não se esqueça de usar aspas simples em torno de seus padrões, caso contrário, as estrelas serão expandidas no nível do shell.
O utilitário nem sempre está disponível, mas se não estiver, você pode instalá-lo com:
Veja a página de manual aqui .
fonte
Em qualquer shell compatível com POSIX (
bash
,dash
,ksh
, etc):Ou com
rename
:fonte
Recentemente, tive que fazer uma renomeação em massa de vários arquivos em que precisei substituir a última ocorrência de um caractere em que o caractere ocorreu várias vezes nos nomes de arquivos. Nesse caso em particular, tive que substituir o último traço
-
por um sublinhado_
, transformando isso:nisso:
Demorou algum tempo, mas isso finalmente aconteceu:
Aqui:
${i%-*}
corresponde ao início do nome do arquivo até a última ocorrência do traço-
${file##*-}
corresponde ao restante do nome do arquivo após a última ocorrência do traço-
fonte