Производительность скрипта не ваша проблема.
Вы просматриваете каждый поиск в /var/www/html 250 000 раз!
Вы можете заменить этот цикл while на:
grep -rl -F -f./imageserver.txt /var/www/html > grep_output
Затем вы проанализируете этот выходной файл, чтобы получить статистику. Это будет сложно, но это не займет 4 дня.
или, может быть, так же просто, как
grep -Ff./imageserver.txt -o grep_output | sort -u
, чтобы получить список используемых изображений. Вы можете использовать comm
, чтобы сравнить это с imageserver.txt, чтобы найти изображения , которые не используются .
Возможно, вы ищете именованные каналы ? Примерно так:
## Create a named pipe
$ mkfifo errorPipe
## In another shell session, launch whatever program you want to pipe the
## error to, telling it to read from errorPipe
$ errorCommand < errorPipe
##$ wc -l errorPipe
1 ErrorPipe Запустите вашу программу, перенаправив ее stderr на именованный канал $ yourCommand 2> errorPipe
Таким образом, на errorCommand
будет передана только ошибка. Для иллюстрации:
$ mkfifo errorPipe
$ wc -l < errorPipe ## this will hang until I write something to errorPipe
Теперь я открываю другой терминал и запускаю:
$ perl -le 'sleep(2);
print "this is stdout";
sleep(2);
print STDERR "this is stderr"' 2>errorPipe
this is stdout
Через 2 секунды я увижу this is stdout
, напечатанное в текущем терминале. Тем временем процесс wc
, который я запустил в другом терминале, завершится и распечатает свои результаты :
$ wc -l errorPipe
1 errorPipe