Como remover comentários em todos os arquivos, inclusive em subdiretórios?

3

para remover comentários (comece com # e /* comment */ ) em settings.php , o comando abaixo funciona bem:

sed '/^\#/d' settings.php > outp.txt
mv outp.txt settings.php
sed '/\/\*/,/*\//d; /^\/\//d; /^$/d;' settings.php > outp2.txt
mv outp2.txt settings.php
sed '/^$/d' settings.php > outp3.txt
mv outp3.txt settings.php

Mas como remover comentários em todos os arquivos, inclusive em subdiretórios?

    
por Juragan Kaskus Ngecrot 20.03.2011 / 08:43

3 respostas

2

A partir do diretório que você deseja percorrer, você pode f.e. use find ./ -type f -name '*.php' -print0 | xargs -0 sed -i '/^\#/d' . xargs constrói a lista de argumentos para sed para melhor desempenho e a opção -i de sed substitui o padrão no local (você não precisa usar o redirecionamento).

EDIT: De acordo com a página de manual do find find ./ -name '*.php' -type f -print0 | xargs -0 sed -i '/^\#/d' é ainda mais rápido, porque não chama stat em cada arquivo ( opção -tipo).

    
por 20.03.2011 / 09:22
1

Você pode sed 'no lugar' com -i. Você pode concatir comandos sed com ponto e vírgula como este: 'c1; c2; c3' Você pode executar comandos com encontrar - sem necessidade de | xargs.

find ./somedir -name "*.php" -execdir sed -i '/^\#/d;/\/\*/,/*\//d; /^\/\//d; /^$/d;;/^$/d' {} + 

Isso funciona para o gnu-find no linux; talvez seu achado não tenha -execdir, -exec deva funcionar tão bem, e talvez não tenha +, então ";" Seria uma solução simples, mas não tão rápida, ou usando xargs como mostrado acima por p.vitzliputzli com a melhoria de Matt para nomes de arquivos com espaço em branco e caracteres especiais é uma alternativa.

    
por 20.03.2011 / 10:22
0

Você pode usar o Vim no modo Ex:

find -name '*.php' -exec ex -sc g/^#/d -cx {} ';'
  1. g pesquisa global

  2. d delete

  3. x salvar e fechar

por 17.04.2016 / 00:26

Tags