ZIP не извлекает все файлы в Debian

ZIP не извлекает все файлы в Debian

Моя машина работает, Debian 6.0.7и у меня есть Zip 3.0 (July 5th 2008), by Info-ZIP. Когда я пытаюсь распаковать .zip-файл, в 2~3 случаях из 10 он не извлекает все. Не хватает 2-3 файлов.

Сначала я думал, что это из-за размера файла и некоторых ограничений, о которых я не знал, но потом я заметил, что это происходит и с маленькими файлами по 150 МБ. Затем я подумал, что, возможно, это из-за того, что я распаковываю его через файл скрипта bash, поэтому я попробовал вручную распаковать файлы, и снова это не было проблемой.

Наконец, сегодня я проверил его с помощью 140-мегабайтного .zip-файла. Я извлекал файл вручную и с помощью моего .sh-скрипта 10 раз, и после каждого раза я запускал, ls -h -R > ../test_n.txtчтобы вести учет папки после каждой распаковки. После сравнения всех 20 файлов я увидел, что 7 из 20 раз он пропускал от 2 до 8 файлов из .zip-файла.

Есть ли у кого-нибудь идеи, почему это может происходить?

решение1

Я понятия не имею, что может происходить... однако, вот несколько вещей, которые вы можете попробовать, чтобы устранить проблему:

  • Если в этой zipверсии есть -lфлаг или что-то еще, позволяющее проверить, какие файлы находятся в zip-файле, не распаковывая его, это может помочь.

    zip -l file.zip
    

    Это покажет вам содержимое zip-файла, поэтому вы должны ожидать, что после его распаковки будет получено такое же количество файлов — вы можете использовать это в качестве теста в своем скрипте, просто чтобы убедиться, что вы всегда распаковываете их все.

  • Действительно ли файлы zip правильные? Если вы получаете файл из другого источника, возьмите контрольную сумму файла и сравните ее с zip-файлом, который вы пытаетесь распаковать. Если они отличаются, то причиной этой проблемы может быть повреждение файла.

  • Какой код возврата у zipкоманды? После распаковки файла с помощью zipвыполните echo $?команду, чтобы проверить код возврата для него — если он отличается от нуля, то программа сообщает вам, что каким-то образом выполнение программы в целом не было успешным. Обратите внимание, что это значение может меняться, но, насколько мне известно, использование нуля для успешного выполнения и других чисел для ошибки/предупреждения является довольно стандартным для утилит unix/linux.

Надеюсь, это поможет :)

Связанный контент