У меня есть файл манифеста, который представляет собой список имен файлов, разделенных новой строкой. Как я могу удалить из папки все файлы, которые не названы в манифесте?
Я пытался построить команду 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
Оба игнорирует, отсортированы ли файлы / нет.