Por que esse comando bash ocupa todo o espaço no dispositivo?

5

Sou um pouco novo na pesquisa via bash, então sinta-se à vontade para me dar sugestões sobre os métodos para usar em vez disso, o que nunca mais vou usar.

Estou procurando por ocorrências de uma string, recursivamente em um diretório , com ~ 50 arquivos php não muito grandes; alguns no diretório atual, alguns em diretórios abaixo do diretório atual, três níveis de diretórios no máximo.

O método que estou usando é

find . | xargs grep "module" > module.txt

Quando em diretórios simples (um nível), isso funciona bem, mas nesse caso, o arquivo ficou com 4 GB de tamanho até preencher todo o espaço na partição . Ainda não foi feito.

Por que esse arquivo está crescendo tão grande?

    
por chelmertz 09.03.2010 / 11:48

3 respostas

20

module.txt é criado antes do início do pipeline, portanto, ele é incluído na pesquisa. grep encontra uma instância de "módulo", então uma linha é adicionada a ele contendo a palavra "módulo". Que grep então encontra e adiciona. Que grep então encontra e adiciona. Que grep então encontra e adiciona. Quais ...

    
por 09.03.2010 / 11:50
1

E qual é a saída sem > module.txt .

Por que não tentar usar grep -R "module" . > ../module.txt ?

    
por 09.03.2010 / 11:53
1
find /path -type f -iname "*.php" | while read -r FILE
do
  grep -H "module" "$FILE" >> "file_with_search_term_found.txt"
done

Ou se o seu grep tiver função recursiva,

grep -RH "module" *.php

Ou com o bash 4.0 shell

shopt -s globstar
for file in /path/**/*.php
do
   if [ -f "$file" ];then
      while read -r line 
      do
         case "$line" in
           *module* ) echo $line >> module.txt;;
         esac    
      done <"file"      
   fi

done
    
por 09.03.2010 / 11:59