2013-02-16 32 views
1

前一段時間,我使用Linux「tar -cf」命令壓縮了一個應用程序。那時的一些文件名是用不同的語言編寫的。Linux untar命令將文件名顯示爲問號

現在,當我使用「tar -xf」解壓縮時,它將其他語言中的文件名顯示爲問號。

有沒有辦法,當我解壓縮它保持原來的文件名稱,因爲它們是?

非常感謝您的幫助。

回答

1

好問題!預計像任何Unix命令一樣,tar可以將其輸出傳送給另一個程序,如果可能的話包括文件名數據。一個快速的搜索結果表明,情況就是這樣:如本博文所述,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的,例如有一個建於標準庫的tar文件模塊:

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 2013-02-18 01:59:31

+0

複製粘貼dispatch_arc_file.sh在Osmanov的頁面中描述。這是一個shell腳本,不是Python代碼。然後運行命令,他在描述中用舊編碼作爲參數寫入。 – hdante 2013-02-24 23:12:57

相關問題