Предполагая, что в ваших файлах нет пробелов (пробелов / вкладок), перечисленных в файле с именем list, тогда вы будете делать:
find /path/to -type f \( ! -name "list" $(printf ' -a ! -name %s\n' $(< list)) \)
Просто добавьте -delete к команде выше для удаления файлов, которые не существуют в файле списка. Если у вашей находки нет опции -delete, вы можете использовать rm с -exec следующим образом:
find /path/to -type f \( ! -name "list" $(printf ' -a ! -name %s\n' $(< list)) \) -exec echo rm {} \;
Или использовать -exec с терминатором +.
find /path/to -type f \( ! -name "list" $(printf ' -a ! -name %s\n' $(< list)) \) -exec echo rm {} +
echo используется только для сушки.