LINUX.ORG.RU

Удалить `bad CRC ` файлы из архива


0

0

Архив содержит много файлов. Некоторые файлы повреждены (bad CRC), как удалить только поврежденные файлы из архива (создать новый архив без поврежденных файлов)?

Я пробовал (не работает): unzip -F old.zip --out new.zip

(man unzip Fix the zip archive(...) -F (...) After the repair, the -t option of unzip may show that some files have a bad CRC. Such files cannot be recovered; you can remove them from the archive using the -d option of zip.)

И что не устраивает? Вначале починить архив утилитой zip с ключом -F, затем протестировать ключом -t и удалиь ключом -d.

Если архив не удаётся починить ключом -F, может помочь ключ -FF.

question4 ★★★★★
()
Ответ на: комментарий от question4

Да, какой командой? -t принадлежит unzip, -d принадлежит zip. у них вывод не стандартный, то есть unzip -t|zip -d не подойдет.

Graduate
() автор топика
Ответ на: комментарий от Graduate

> Да, какой командой? -t принадлежит unzip, -d принадлежит zip. у них вывод не стандартный, то есть unzip -t|zip -d не подойдет.

А, в автомате. Так, вроде, нельзя, только преобразовывать вывод unzip в команды zip каким-нибудь sed-ом.

Кратко:

unzip -t -qq repaired.zip 2>/dev/null
выведет на stdout список сбойных файлов с фразой " bad CRC ... (should be ...)" после каждого

unzip -t -qq repaired.zip 2>/dev/null | sed 's/ *bad CRC [0-9a-f]* *(should be [0-9a-f]*) *//; s/.*/zip -d repaired.zip «&»/' | sh
преобразует этот вывод в скрипт, удаляющий файлы по одному, и скормит скрипт шеллу. Однострочник не отлаживал, как он себя поведёт на именах со спецсимволами и русскими буквами — не знаю, но пробелы в середине обрабатывает нормально.

Вроде, можно сбросить список файлов во временный файл и удалить все сразу, но с этим я не разбирался.

question4 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.