Shell

內部具有長文件名的存檔 - 取消存檔程序達到文件系統限制並失敗

  • July 26, 2017

我有一個 unarchiver,它接受一個存檔名稱和一個目錄名稱,並將該存檔中的所有文件轉儲到該目錄中。沒有其他命令行選項。但是,有人在我要解壓縮的存檔中壓縮了一個文件,文件名中有 500 個字元,現在該程序在遇到該文件時失敗(實際上所有文件系統的限制為 256)。除了更改原始碼和重新編譯 unarchiver,我還有什麼選擇?

我必須將某些東西掛載為一個目錄,該目錄將獲取 unarchiver 正在寫入的文件,並將它們轉儲到其他地方——甚至可能作為一個大文件。這個東西不應該發送失敗消息,即使某些寫入確實失敗了。

我嘗試將目錄掛載為文件——但是,該目錄必須具有底層文件系統,然後它具有與原始 FS 相同的限制。

我也嘗試過使用管道——但管道後面不能有參數(例如/pipe/reallylongfilename)。這樣的事情可能嗎?

存檔是一個.zim. 我正在使用zimdumpOpenZim 庫中的工具。

如果您知道這個很長的名稱,那麼您可以嘗試使用十六進制編輯器(或sed?)在存檔中對其進行編輯。如果您需要從頭開始,請使用副本。

讓範例文件名為very-long-filename. 合理的攻角:

  • very/long/filename,
  • very//////filename,
  • very0long-filename其中0表示 NULL 字元 ( 0x00),
  • very000000000000000如上)。

一般來說,刪除字元是不明智的(從而使存檔更小)。它會更改存檔中的重要偏移量,並且可能會損壞它。

我用一個.zip文件做了一個測試。我承認我very-long-filename的時間不算長。我設法使它更短,也許這些方法也適用於太長的名稱。在我的測試中,我不得不編輯文件的兩個片段,因為其中的每個文件名.zip都儲存了兩次

您使用了“壓縮”一詞,但沒有明確說明您的存檔是什麼。不管它是什麼,我希望它以純文字形式儲存文件名,並且您將成功地編輯它們。祝你好運。

引用自:https://unix.stackexchange.com/questions/373944