Shell
內部具有長文件名的存檔 - 取消存檔程序達到文件系統限制並失敗
我有一個 unarchiver,它接受一個存檔名稱和一個目錄名稱,並將該存檔中的所有文件轉儲到該目錄中。沒有其他命令行選項。但是,有人在我要解壓縮的存檔中壓縮了一個文件,文件名中有 500 個字元,現在該程序在遇到該文件時失敗(實際上所有文件系統的限制為 256)。除了更改原始碼和重新編譯 unarchiver,我還有什麼選擇?
我必須將某些東西掛載為一個目錄,該目錄將獲取 unarchiver 正在寫入的文件,並將它們轉儲到其他地方——甚至可能作為一個大文件。這個東西不應該發送失敗消息,即使某些寫入確實失敗了。
我嘗試將目錄掛載為文件——但是,該目錄必須具有底層文件系統,然後它具有與原始 FS 相同的限制。
我也嘗試過使用管道——但管道後面不能有參數(例如
/pipe/reallylongfilename
)。這樣的事情可能嗎?存檔是一個
.zim
. 我正在使用zimdump
OpenZim 庫中的工具。
如果您知道這個很長的名稱,那麼您可以嘗試使用十六進制編輯器(或
sed
?)在存檔中對其進行編輯。如果您需要從頭開始,請使用副本。讓範例文件名為
very-long-filename
. 合理的攻角:
very/long/filename
,very//////filename
,very0long-filename
其中0
表示 NULL 字元 (0x00
),very00000000000000
(0
如上)。一般來說,刪除字元是不明智的(從而使存檔更小)。它會更改存檔中的重要偏移量,並且可能會損壞它。
我用一個
.zip
文件做了一個測試。我承認我very-long-filename
的時間不算長。我設法使它更短,也許這些方法也適用於太長的名稱。在我的測試中,我不得不編輯文件的兩個片段,因為其中的每個文件名.zip
都儲存了兩次。您使用了“壓縮”一詞,但沒有明確說明您的存檔是什麼。不管它是什麼,我希望它以純文字形式儲存文件名,並且您將成功地編輯它們。祝你好運。