Иногда необходимо сравнить 2 директории с достаточно большим количеством файлов на предмет наличия или отсутствия файлов, не анализируя их содержимое. В принципе для такой задачи в *nix существует утилита diff, впрочем с одним «но» — анализируется содержимое файлов и вывод несколько «избыточен». Представьте, что необходимо сравнить файловые системы jail с количеством файлов примерно 100 000. Мы, естественно, пойдем другим путем. В настоящей системе существуют еще 2 утилиты: find и comm.
Вначале создаем списки файлов:
# find . -type f -print | sort > /home/myuser/old.txt
# find . -type f -print | sort > /home/myuser/new.txt
Список создается рекурсивно. Далее сравниваем списки:
Получаем список, в котором файлы, присутствующие только в директории /home/myuser/olddir записаны без отступа, а файлы, присутствующие только в директории /home/myuser/newdir записаны с двумя символами табуляции в начале строки. Далее полученный список можно обрабатывать так, как вам угодно.
Характерно, что весь процесс для директорий с количеством файлов примерно 50 000 занимает несколько секунд, сравните, для интереса, в работой diff.