Grep - отображение текущего каталога / файла в рекурсивном поиске - PullRequest
0 голосов
/ 11 октября 2019

Проблема

Иногда, когда я запускаю инструмент grep рекурсивно, он застревает в некоторых больших каталогах или в больших файлах, и я хотел бы видеть каталог или имя файла, потому что, возможно, я могупонимаю, что мне не нужно сканировать этот конкретный каталог / файл в следующий раз, когда я использую grep для аналогичной цели, поэтому исключая его с соответствующими параметрами grep.

Есть ли способ сообщить grepкаталог / файл текущего пути, который сканируется в таких поисках?

Мои попытки

Я пытался найти здесь, но что-то найти невозможно, так как обычно ключевые слова current directory используются для другихпричины, поэтому существует противоречивая терминология.

Я также пробовал такие вещи, как:

man grep | grep -i current
man grep | grep -i status

(и многие другие) до сих пор безуспешно.

РЕДАКТИРОВАТЬ: Iтолько что нашел полезный ответ здесь , который предназначен для другой проблемы, но я думаю, что это может сработать, если я изменю следующий код, добавив команду echo где-то вв цикле for, хотя я также только что понял, что для этого требуется bash 4, и, к сожалению, у меня есть bash 3.

# Requires bash 4 and Gnu grep
shopt -s globstar
files=(**)
total=${#files[@]}
for ((i=0; i<total; i+=100)); do
  echo $i/$total >>/dev/stderr
  grep -d skip -e "$pattern" "${files[@]:i:100}" >>results.txt
done

1 Ответ

1 голос
/ 11 октября 2019

find . -type f -exec echo grepping {} \; -exec time grep pattern {} \; 2>&1

  • find . -type f для рекурсивного поиска всех файлов.
  • -exec echo grepping {} для вызова каждого файла
  • -exec time grep ... {} для отчетавремя, которое каждый grep занимает
  • 2>&1, чтобы вывести stderr time на стандартный вывод.

Это не сообщает об общем времени на каталог. Для этого нужно либо более продвинутый поиск, чтобы найти листовые каталоги для grep -d, либо добавить кумулятивное время для пути, что я бы сделал с perl -p ... но это тоже нетривиально.

...