Intereting Posts
Как я могу легко определить, какое псевдотерминальное устройство назначено терминальному эмулятору? FreeBSD на USB-накопителе sed для печати шаблона, который охватывает линии Что я должен установить для своего локали и каковы последствия этого? Как загрузить Fedora 18 (Grub2) Как назначить сочетание клавиш для конкретного приложения в Openbox? Автоматическое перемещение файлов в каталог один за другим и только тогда, когда целевая папка пуста Захват timestamped событий мыши X и рендеринг видео с пользовательским указателем мыши? Использование цикла for для петли над несколькими массивами в bash Проблема с командой установки для копирования всего каталога содержимое xp cd не отображается Могу ли я исчерпывать дисковое пространство, создавая очень большое количество пустых файлов? Как конвертировать отсканированный PDF-файл с текстом OCRed в текст без текста OCRed? Как передать значение, которое должно быть в кавычках для команды? Символическая ссылка в виде user@hostname.6912: 144780xxxx

Может ли tar архиватор загрузить файл?

Я получил tar-архив от сотрудника и после распаковки обнаружил, что некоторые текстовые файлы повреждены. Точнее они заполнены нулями. Они имеют правильный размер, но все байты равны 0x00.

Может ли эта ситуация быть вызвана некоторой несовместимость версий tar или, например. китайский символ, содержащийся в файлах, или файлы должны были быть повреждены во время сжатия? Я не ожидаю, что во время переноса возникла проблема, потому что контрольная контрольная сумма в порядке.

Наиболее вероятная проблема заключается в том, что смола была повреждена во время ее создания. Из-за того, как определен формат tar (поскольку он предназначен для потокового архиватора), он должен заранее определить длину файла. Он записывает эту длину в заголовок tar, а затем начинает записывать содержимое файла в файл tar. Если по какой-либо причине происходит ошибка чтения файла, или если файл сжимается во время архивирования, он заполняет NULL. Это необходимо, так что длина, указанная в заголовке, по-прежнему действительна при извлечении (она не может вернуться и изменить заголовок из-за своей потоковой природы, и если она не помещает файл с NULL, что приведет к ошибке, когда извлечение следующего файла в архив).

Кроме того, поскольку tar имеет дело с двоичными данными (он не имеет «текстового» режима), не должно быть никаких проблем (по отношению к tar) с различными кодировками языков.

Вы уверены, что все байты равны 0x00 ? В этом случае ваши файлы не содержат никакой информации (кроме их размера). Никакая программа не может хранить или передавать информацию как все нули (если она не телепатическая).

Что может случиться, так это то, что файл имеет переменный текст и нулевые байты. Вот что это значит: вы получили файлы, которые содержат текст в формате Unicode, закодированный как UTF-16 (или почти эквивалентный). Каждый символ занимает 16 бит (два байта). Юникод присваивает своим символам ASCII английские буквы и символы, что означает, что, например, буква A является шестнадцатеричным 41 в ASCII и 00 41 в Unicode. В результате вы выписываете «Hello» как UTF-16 и читаете его как 8-битный текст, вы увидите следующее:

 \0 H \0 e \0 l \0 l \0 o 

В этом случае это не было бы ошибкой tar . Но если вы действительно получили все нулевые файлы и проверку контрольных сумм, в программе создания определенно что-то не так. Не проблема с версией, но кто знает? Возможно, проблема с аппаратным обеспечением, вызывающая генераторную программу для чтения всех нулей.

(Возможно, конечно, что файлы были правильно заархивированы, а ошибка – в программе, которая создала архивные файлы).