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


3

para remover comentários (comece com # e /* comment */ ) em settings.php, abaixo o comando é apenas 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?


FYI, você pode usar sed -i para fazer uma edição no local. Além disso, você está fazendo /^$/d duas vezes.
grawity

obrigado. Eu sou novato em usar sed. Vou dar uma olhada
Juragan Kaskus Ngecrot

Respostas:


2

Começando pelo diretório que você deseja percorrer, você pode f.e. usar 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).

EDITAR: De acordo com a manpage de encontrar find ./ -name '*.php' -type f -print0 | xargs -0 sed -i '/^\#/d' é ainda mais rápido, porque não chama stat em todos os arquivos (opção -tipo).


1
Você pode preferir usar o -print0 parâmetro para find E use xargs -0 - isto acrescentará \ 000 (chr (0), caractere ascii 0, 0x00, chame como quiser) após cada nome de arquivo, e diz ao xargs para esperar que o caractere seja um delimitador de nome de arquivo. Isso permite manipular nomes de arquivos com espaços neles.
Majenko

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 find - não há 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 também, 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.


0

Você pode usar o Vim no modo Ex:

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

  2. d excluir

  3. x salvar e fechar

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.