Повысить производительность простой команды find -exec - PullRequest
0 голосов
/ 07 февраля 2019

Скажем, у меня в bash работает очень простая команда:

find [folder] -exec ( echo [something manipulated with sed]; cat [small_file]; ) > file

, где папка содержит 6 миллионов небольших файлов, например:

$ cat smallfile_000000001.txt
123456789012345678901234567890

Как мне сделать это быстрее ...или устранить неполадки с top / iostats, что делает этот процесс вечным?С 6 миллионами файлов это занимает около 6 часов.За одну секунду обрабатывается около 270 файлов.

Буду очень признателен за любые советы или анализ, чтобы направить меня в нужном направлении!Спасибо!

РЕДАКТИРОВАТЬ: точное исполнение:

-exec ./helper.sh {} \; > output.txt

, где helper.sh:

echo -ne "$1 " | sed 's/\.\.\/something\/foo\/bar\/123\///'
cat "$1"
exit 0

1 Ответ

0 голосов
/ 07 февраля 2019

Вы создаете скрипт, sed и cat для каждого найденного файла.Вы получите хорошее улучшение скорости, используя другой дизайн: используйте конструкцию -exec ... + с awk следующим образом:

find [folder] -exec awk '{sub(/\.\.\/something\/foo\/bar\/123\//, "", FILENAME); print FILENAME, $0}' {} + > output.txt

Это запустит уникальный awk для группы файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...