5

Я немного новичок в поиске через bash, так что не стесняйтесь давать мне советы о методах, которые следует использовать вместо этого, которые я никогда больше не буду использовать.

Я ищу вхождения строки, рекурсивно в каталоге, с ~ 50 не очень большими php-файлами в нем; некоторые в текущем каталоге, некоторые в каталогах под текущим каталогом, три уровня каталогов не более.

Я использую метод

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

В простых (одноуровневых) каталогах это работает нормально, но в этом случае размер файла увеличивался до 4 ГБ, пока он не заполнил все пространство раздела. Это еще даже не было сделано.

Почему этот файл становится таким большим?

3 ответа3

20

module.txt создается до запуска конвейера, поэтому он включается в поиск. grep находит в нем экземпляр "module", поэтому к нему добавляется строка, содержащая слово "module". Какой grep потом находит и добавляет. Какой grep потом находит и добавляет. Какой grep потом находит и добавляет. Который...

1

И что такое вывод без > module.txt .

Почему бы не попробовать использовать grep -R "module" . > ../module.txt?

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

Или если ваш grep имеет рекурсивную функцию,

grep -RH "module" *.php

Или с оболочкой bash 4.0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .