Linux

選擇最佳目錄來壓縮和節省磁碟空間

  • July 10, 2019

在不儲存壓縮文件的情況下估計目錄可以實現的壓縮級別的最佳方法是什麼?

我有大量目錄和子目錄,其中包含不同性質的文件(二進製文件、文本文件、壓縮文件等)。我需要壓縮其中一些目錄,但我沒有足夠的空間來壓縮所有目錄(甚至其中一些),並且它們按壓縮率對它們進行排序。

出於這個原因,我需要列出它們的壓縮率(可以壓縮多少),然後才能確定要壓縮的壓縮率。

我有一個未壓縮目錄的目錄大小列表:

du -f --maxdepth=3 > /tmp/list_of_directories

Tar、bz2 或 gzip 可用於使用快速壓縮級別將每個目錄壓縮到空管道,但如果不保留文件,則不會生成壓縮​​率靜態數據。

由於必須以某種方式將整個內容壓縮到一個 zip 管道中,因此該解決方案將是非常密集的處理,但在儲存方面非常輕,因為壓縮結果將在生成時被丟棄。

簡而言之,問題可以恢復為“是否有任何工具可以為給定的流、文件或目錄生成壓縮率統計資訊而不儲存最終的壓縮文件?”

可以通過將目錄的內容通過管道傳輸到壓縮工具並將壓縮流重定向到空管道(以避免使用空間)來完成。此壓縮工具必須: 1 - 壓縮到管道流 2 - 能夠壓縮到 /dev/null 2 - 提供丟棄文件的壓縮統計資訊

在最流行的工具中,bzip2 是最適合的工具,特別是由於輸出狀態與數字字節進出。

最終解決方案如下所示:

cat $(查找 DIRECTORY_PATH) | bzip2 -c –verbose > /dev/null

第一部分將連接所選目錄中任何文件的所有內容。

貓 $(找到 DIRECTORY_PATH)

而第二部分將壓縮來自第一部分的連接輸入,最後生成單個報告(–verbose),同時將輸出重定向到空管道

bzip2 -c –verbose > /dev/null

輸出應如下所示,其中“(\d+) in”正則表達式應擷取字節目錄中所有文件的原始大小,“(\d+) in”以字節為單位的壓縮大小。輸出應如下所示:

1.581:1,5.059 位/字節,節省 36.77%,1039062 輸入,657029 輸出。

此解決方案對目錄上的文件數量有限制,但可以作為一個很好的起點來辨識具有良好壓縮潛力的目錄以節省空間。

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