Como remover colchetes, qualquer texto dentro e espaço depois e antes dos colchetes?

6

Tenho muitas fotos que precisam ser renomeadas.

[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg

Preciso que todos os colchetes sejam removidos. Para isso, encontrei este & amp; this .

Usando o comando sed como nessas páginas, o espaço antes e depois dos colchetes ainda está lá. No meu caso, quero o texto dentro, espaço antes & amp; depois, e os parênteses a serem removidos.

Happy Day_001.jpg  
Summer Camp_165.jpg  
Music Fest_58.jpg

Para remover [first]  & amp;  [last] colchetes, como posso fazer isso com um comando sed ?

    
por Hidayats 23.10.2017 / 11:12

2 respostas

7

sed é a ferramenta errada. Não renomeia arquivos. Embora você possa emparelhá-lo com algo que pode, é mais simples usar rename from Perl :

rename -n 's/\[.*?\]//g' *

Com -n , rename mostrará quais alterações serão feitas. Execute sem -n para realmente renomear os arquivos. rename é Perl, e em Perl, .*? não é uma correspondência gulosa como .* , então você não precisa usar truques como [^]]* .

Para remover também o espaço em branco:

rename -n 's/\s*\[.*?\]\s*//g' *
    
por muru 23.10.2017 / 11:19
9

Você não deve usar sed para renomear arquivos, mas pode usar o programa Perl rename , por exemplo:

$ rename -n 's/\[[^]]+\] ([^[]+) \[[^]]+\]//' *
rename([Beach] Music Fest_58 [August].jpg, Music Fest_58.jpg)
rename([Mountain] Summer Camp_165 [May].jpg, Summer Camp_165.jpg)
rename([Wedding] Happy Day_001 [February].jpg, Happy Day_001.jpg)

Remova -n após o teste para realmente renomear os arquivos.

Notas

  • s/old/new replace old com new
  • \[ literal [
  • [^[]+ alguns caracteres que não são [
  • (stuff) save stuff para referência posterior como , etc

Isso só funciona se os nomes dos seus arquivos estiverem consistentes. a resposta do muru é muito mais portátil.

    
por Zanna 23.10.2017 / 11:20