Eu tenho uma pasta com uma série de arquivos denominados:
prefix_1234_567.png
prefix_abcd_efg.png
Gostaria de remover em lote um sublinhado e o conteúdo do meio para que a saída fosse:
prefix_567.png
prefix_efg.png
Relevante, mas não completamente explicativo:
_*_
por um espaço em branco.Respostas:
No seu caso específico, você pode usar o seguinte
bash
comando (bash
é o shell padrão no macOS):Nota: Se houver uma chance de os nomes dos seus arquivos começarem
-
, coloque--
diante deles [1]:mv -- "$f" "${f/_*_/_}"
Nota:
echo
é anexado amv
para executar uma execução a seco. Remova-o para executar a renomeação real.Você pode executá-lo na linha de comando ou usá-lo em um script.
"${f/_*_/_}"
é uma aplicação debash
expansão de parâmetro : o (primeiro) padrão de correspondência de substring_*_
é substituído por literal_
, cortando efetivamente o token do meio do nome._*_
é um padrão (uma expressão curinga, também usada para globbing), não uma expressão regular (para aprender sobre padrões, executarman bash
e procurarPattern Matching
).Se você renomear arquivos em lote com frequência, considere instalar uma ferramenta especializada, como o
rename
utilitário baseado em Perl . No macOS, você pode instalá-lo usando o popular gerenciador de pacotes Homebrew , da seguinte maneira:Aqui está o equivalente ao comando no topo usando
rename
:Novamente, este comando executa uma execução a seco; remove
-n
para executar a renomeação real.bash
solução,s/.../.../
executa a substituição de texto, mas - ao contrário debash
- expressões regulares verdadeiras são usadas.[1] A finalidade do argumento especial
--
, que é apoiado pela maioria dos serviços públicos, é para sinalizar que os argumentos subsequentes devem ser tratados como operandos (valores), mesmo se eles olham como opções devido a começar-
, como Jacob C. notas.fonte
.*
->$1
), por exemplo, RenomearFoo bar S01E01 biz baz.ext
paraS01E01.ext
:rename -n -e 's/.*(S[0-9]{2}E[0-9]{2}).*(\.[a-z]{2,4})/$1$2/' *
echo
para corridas a seco. Obrigado pela dica!brew install rename
Para renomear arquivos, você pode usar o
rename
utilitário:brew install rename
Por exemplo, para alterar uma sequência de pesquisa em todos os nomes de arquivos no diretório atual:
Remova o parâmetro 'n' para aplicar as alterações.
Mais informações:
man rename
fonte
OS X
As versões doGNU bash
( x86_64-apple-darwin ) não incluem o utilitário de renomeação.brew install rename
rename -vs GLYCOPHORIN GLYCC *
e agora renomeia automaticamente mais de 450 arquivos. E super rápido também.Você poderia usar sed:
resultado:
* para executar um teste a seco primeiro, substitua
mv
no final porecho
Explicação:
fonte
ls * | xargs -I % bash -c 'echo mv "%" "$(sed 's@_.*_@_@' <<<"%")"'
(removaecho
para realmente renomear).Eu tinha um lote de arquivos parecido com este: be90-01.png e precisava alterar o traço para sublinhado. Eu usei isso, que funcionou bem:
fonte
você pode instalar o
rename
comando usandobrew
. basta fazerbrew install rename
e usar.fonte
Usando
mmv
fonte
sudo apt-get install mmv
.brew install mmv
.tente isso
Aqui está outra maneira:
fonte