Этот подход должен работать:
cd /path1
find . -type f -exec cmp -s {} /path2/{} \; -delete
Как это устроено:
find . -type f просматривает все файлы в текущем каталоге (A) и его подкаталогах.
cmp -s {} /path2/{} молча (-s) сравнивает текущий обработанный файл ({}) с соответствующим файлом в B (/path2/{}).
Если файлы идентичны, cmp возвращает true и условие -exec совпадает.
Если условие -exec совпадает, -delete удаляет файл.
Я предлагаю заменить -delete на -print перед запуском фактической команды, чтобы проверить, работает ли она должным образом.
Чтобы справиться с оставшимися пустыми каталогами, вы можете выполнить команду:
find . -type d -exec rmdir -p {} \; 2> /dev/null
-type d находит только каталоги.
-exec rmdir -p {} \; выполняет rmdir -p {} для каждого найденного каталога.
{} - это каталог, который был найден, и ключ -p заставляет rmdir также удалить свои пустые родительские каталоги.
2> /dev/null подавляет сообщения об ошибках, возникающие при попытке удалить непустые или ранее удаленные каталоги.
Поскольку rmdir не может удалять непустые каталоги, это должен быть самый безопасный способ.