Папки diff рекурсивно против многопоточности - PullRequest
3 голосов
/ 23 августа 2011

Мне нужно сравнить две структуры каталогов, каждый из которых содержит около миллиарда файлов (глубина каталогов до 20 уровней)

Я нашел обычное diff -r /location/one /location/two медленно.

Есть ли реализация многопоточности diff? Или это возможно путем объединения shell и diff вместе? Если да, то как?

1 Ответ

2 голосов
/ 23 августа 2011

Ваш диск станет узким местом.

Если вы не работаете над tmpfs, вы, вероятно, только потеряете скорость.Тем не менее:

find -maxdepth 1 -type d -print0 |
    xargs -0P4 -n1 -iDIRNAME diff -EwburqN "DIRNAME/" "/tmp/othertree/DIRNAME/"

должно выполнять довольно приличную работу по сравнению деревьев (в данном случае . с /tmp/othertree).

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

Аргумент -P4 для xargs указывает, что вы хотите максимум 4 одновременных процесса.

Также обратите внимание на xjobs utitlity , который лучше справляется с разделением вывода.Я думаю, что с GNU xargs (как показано на рисунке) вы не можете удалить опцию -q, потому что она будет смешивать различия (?).

...