Tar

是否可以搜尋 .tar.gz 文件廣度優先?

  • June 2, 2022

我想從這裡下載一個大 (199GB) .tar.gz 文件的一部分。首先,我使用以下命令列出 .tar.gz 文件中的所有文件:

wget -qO- https://www.cs.cornell.edu/projects/megadepth/dataset/Megadepth_v1/MegaDepth_v1.tar.gz | tar -tz

接下來,我嘗試使用以下命令下載 .tar.gz 中文件夾的內容:

wget -qO- https://www.cs.cornell.edu/projects/megadepth/dataset/Megadepth_v1/MegaDepth_v1.tar.gz | tar -xz phoenix/S6/zl548/MegaDepth_v1/0000

但是,這需要很長時間,因為該tar命令會深度優先搜尋並遞歸地搜尋下面的每個文件夾phoenix/S6/zl548/MegaDepth_v1。我只對文件夾的內容感興趣phoenix/S6/zl548/MegaDepth_v1/0000。有沒有辦法在不搜尋其他文件夾的子文件夾的情況下下載該文件夾的內容,例如

phoenix/S6/zl548/MegaDepth_v1/0162
phoenix/S6/zl548/MegaDepth_v1/0001
phoenix/S6/zl548/MegaDepth_v1/0132

換句話說,有沒有更快的方法來下載文件夾的內容phoenix/S6/zl548/MegaDepth_v1/0000


上述命令的一些參考:

如何從 tar.gz 中提取特定文件

如何下載存檔並解壓縮而不將存檔保存到磁碟?

https://stackoverflow.com/q/2700306/13809128

tar寫入文件頭,然後是文件內容,然後是下一個文件頭,下一個文件內容,依此類推。

沒有與條目關聯的順序,您可以提出的唯一優化是跳過文件的內容,以獲取下一個標題,直接查找它。為此,您需要有一個可搜尋的文件。

但是您的文件.gz是壓縮的,因此您沒有可靠的方法可以跳到下一個條目,這意味著您必須閱讀(下載)整個文件才能獲取內容。這就是答案:不,您無法避免讀取/下載整個文件。

所以,既然無論如何你都必須完全下載它,你最好只下載一次,然後在本地文件系統中解決所有問題。

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