У меня есть файл манифеста, который является просто списком имен, разделенных новой строкой. Как удалить все файлы, которые не указаны в манифесте из папки?
Я попытался построить команду find ./ ! -name "filename"
динамически:
command="find ./ ! -name \"MANIFEST\" "
for line in `cat MANIFEST`; do
command=${command}"! -name \"${line}\" "
done
command=${command} -exec echo {} \;
$command
Но файлы остаются.
[Примечание:] Я знаю, что это использует эхо. Я хочу проверить, что моя команда делает, прежде чем использовать его.
Решение: (спасибо PixelBeat)
ls -1 > ALLFILES
sort MANIFEST MANIFEST ALLFILES | uniq -u | xargs rm
Без временного файла:
ls -1 | sort MANIFEST MANIFEST - | uniq -u | xargs rm
Игнорирует, отсортированы ли файлы/нет.