如何壓縮文件夾中的所有文件並通過命令行擦除未去皮的版本?
我有一個備份磁碟,其中包含我想要壓縮以節省此磁碟空間的文件的未壓縮版本。磁碟(包含要壓縮的文件)已滿(大約 3TB 和 17GB 可用空間)。是否有可以執行的命令或腳本來遍歷磁碟中的每個文件並在刪除未壓縮版本的同時對其進行壓縮。例如,如果我有 f1 f2 f3 之類的文件夾,我只想以 f1.tar.gz f2.tar.gz f3.tar.gz 結束,並刪除原始未壓縮文件夾,以便我在驅動器中有更多空間?另外,它也適用於子文件夾嗎?
編輯:我希望盡可能多地壓縮文件而不會有損壞的風險。大約有 150 個父目錄,大多數有 10 到 50 個子文件夾,其中一些包含已經壓縮的文件。作為一個簡化範例,我的文件結構如下所示:
Parent folders: parent1 parent2 parent3
每個都可能有類似的東西:
child1 child2 child3 file1.zip
每個人都可能有
file1 file2.zip file2.tar.gz file3
當然,一些父文件夾只包含沒有子文件夾的文件。我想做的是從 bash 執行腳本或使用 tar 輸入命令來壓縮父文件夾,如下所示:
parent1.tar.gz parent2.tar.gz parent3.tar.gz
在擦除未壓縮的父文件夾時,該命令首先會壓縮 parent1.tar.gz(假設我在同一個硬碟驅動器上有足夠的空間用於 tarball 文件),然後它會擦除它,因此文件結構看起來像
parent1.tar.gz parent2 parent3,
然後該命令將繼續對 parent2 和 parent3 執行相同的操作,最終文件結構為:
parent1.tar.gz parent2.tar.gz parent3.tar.gz
如果可能的話,很高興知道如何將此操作擴展到子文件夾,但如果這太複雜或不會節省太多額外空間,那就沒有必要了。知道一種按每個文件佔用的空間順序對文件進行排序的方法,以查看在有足夠的空間可用以自動化該過程之前需要單獨壓縮多少文件,這也很好,但這也是不需要。
有人可能有一個腳本(或寫一個)。
zip
我使用或使用 gzip 或 bzip2的腳本來執行此類操作。兩者都有在存檔完成後刪除文件的規定。問題是
- 您當然可以為每個目錄編寫壓縮檔案
- 在存檔完成之前,您無法刪除該目錄
- 您無法更新壓縮存檔,例如,通過向其中添加文件。
所以你必須有足夠的可用空間來創建第一個檔案,並逐漸獲得足夠的空間來編寫更大的檔案。想必你沒有很多壓縮文件(如png、jpg、pdf)。否則你不會獲得空間。
如果不是因為空間不足的可能性很大,那麼問題將只是對要壓縮/刪除的目錄的腳本循環。但是,對於 3Tb 的 17Gb 可用空間,某些目錄可能變得相當大。您將不得不進行一些分析,看看這是否會干擾概述的簡單解決方案。
進一步閱讀: