2013-02-16 1 views
1

Некоторое время назад я сжал приложение, используя команду Linux «tar -cf». В то время некоторые из названий файлов были на другом языке.Команда Linux untar показывает имена файлов как вопросительные знаки

Теперь, когда я распаковываю с помощью «tar -xf», в качестве вопросительных знаков отображаются имена файлов на другом языке.

Есть ли способ, который, когда я распаковываю его, сохраняет исходные имена файлов так, как они были?

Ваша помощь очень ценится.

ответ

1

Хороший вопрос! Ожидается, что, как и любая команда Unix, tar может транслировать свой вывод в другую программу, если это возможно, включая данные имени файла. Быстрый поиск в Google показывает, что это так: как описано в этом сообщении в блоге, GNU tar поддерживает параметр -to-command для записи вывода в канал вместо прямой работы с каталогом.

http://osmanov-dev-notes.blogspot.com.br/2010/07/how-to-handle-filename-encodings-in.html

Так что вопрос написания сценария для преобразования файла в UTF-8, как это сделано в цитируемом сообщении. Другой вариант, также описанный в тексте, становится очевидным после того, как вы прочитали его, чтобы просто извлечь все, а затем написать сценарий для преобразования каждого файла в каталог. В ссылке есть тривиальный скрипт php, который делает это.

Наконец, вы всегда можете написать свою собственную версию tar с помощью языков сценариев, и это легко. Python, например, имеет модуль встроенный в файл обработан стандартной библиотеки:

http://docs.python.org/2/library/tarfile.html#examples

Вы можете использовать TarFile.extractfile(), shutils.copyfileobj() и str.decode() в цикле, чтобы вручную извлечь при изменении имени имени файла.

Ссылки:

http://www.gnu.org/software/tar/manual/tar.html#SEC84

http://docs.python.org/2/library/tarfile.html

http://www.manpagez.com/man/1/iconv/

+0

Благодаря hdante. Это не помогло одной причине - я не программист на Python. Кроме того, приложение очень большое, и файлы распространяются через сотни каталогов. – amirak17

+0

copy-paste dispatch_arc_file.sh описана на странице Османова. Это скрипт оболочки, а не код python. Затем запустите команду, как он писал в описании со старой кодировкой в ​​качестве параметра. – hdante

 Смежные вопросы

  • Нет связанных вопросов^_^