Возможен ли конвейер только при ошибке?

Производительность скрипта не ваша проблема.

Вы просматриваете каждый поиск в /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, чтобы найти изображения , которые не используются .

-4
06.10.2020, 22:55
1 ответ

Возможно, вы ищете именованные каналы ? Примерно так:

## 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
0
18.03.2021, 22:59

Теги

Похожие вопросы