Duas linhas muito semelhantes de sed, podem ser combinadas?

1

Eu tenho as duas linhas seguintes em um script de shell e queria saber se havia alguma maneira de condensá-las em uma usando sed. Não tenho certeza se há um curinga ou qualquer coisa que possa substituir as palavras Glitch e Chill, mas se houver, eu gostaria de saber. Tudo o que realmente importa é que ele remove tudo nos colchetes estranhos que você vê e nada mais é tocado.

find . -type f -name '【Chill*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Chill.*】//'); mv -v "$file" "$new"; done' _ {} +  
find . -type f -name '【Glitch*' -execdir bash -c 'for file in "$@"; do new=$(echo "$file" | sed -r 's/【Glitch.*】//'); mv -v "$file" "$new"; done' _ {} +
    
por user401590 27.12.2014 / 08:06

3 respostas

1

Você sabe que pode fazer tudo usando a renomeação do Perl:

$ rename -n 's:【Chill.*】|【Glitch.*】::' 【Chill* 【Glitch*
【Chillxx】file1.ext  renamed as file1.ext
【Chillyy】file2.ext  renamed as file2.ext
【Glitchxx】file3.ext renamed as file3.ext
【Glitchyy】file4.ext renamed as file4.ext
    
por 27.12.2014 / 13:15
1
find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c 
'for file in "$@"; do 
   new=$(echo "$file" | sed -r 's/【Chill.*】\|【Glitch.*】//');
   mv -v "$file" "$new";
 done' _ {} +
    
por 27.12.2014 / 10:22
0

A resposta de @Cyrus é boa, mas seria ainda melhor sem sed , e com loop for simplificado:

find . -type f -name '【Chill*' -o -name '【Glitch*' -execdir bash -c 
'for file; do 
   new=${file/【Chill*】/};
   new=${new/【Glitch*】/};
   mv -v "$file" "$new";
 done' _ {} +
    
por 27.12.2014 / 10:56

Tags