Last Updated on 2021-08-01 by Clay
之前,我曾經在在以下這兩篇文章中,分別筆記了在 Linux 中『各種壓縮指令』以及『使用軟連結指向檔案』。
而今天,我要紀錄的則是如何『壓縮檔案,同時保留軟連結符號』。
直接使用 zip 指令壓縮是會有問題的
作為示範,我今天已經有了一個無限指向自身的『A 資料夾』。
本來 A 資料夾中,會同時存在著『A 資料夾自己的軟連結』以及一份名為 test.txt 的檔案。
如果我們進入軟連結的下一層,我們同樣會看到這一個資料夾、以及一個 test.txt。
就這樣,可以證明軟連結真的指向原本的 A 資料夾。
那麼如果我們直接使用 zip
指令壓縮,軟連結資料夾會發生什麼事呢?
mkdir B
zip -r B/A.zip A/
unzip B/A.zip -d B/
這樣一來,我們就將原本的 A 資料夾壓縮了一份並在 B 資料夾中解壓縮,現在我們使用 du
指令來查看兩個資料夾有什麼不同呢?
du A/
Output:
這是原本的資料夾。由於底下是軟連結指向自己,所以並不佔空間。而另外解壓縮後的呢?
du B/A/
Output:
非常壯觀!而且每份軟連結資料夾現在都是獨立的資料夾,所以會很佔空間 —— 今天之所以看起來還好,是因為我資料夾底下只有一份 test.txt 的文件,如果今天放在資料夾內的是圖片、影片呢?
這就是壓縮帶有軟連結資料夾的危險之處。
使用 -ry 參數
回到正題上,在使用 zip
指令壓縮帶有軟連結資料夾時,我們應該加上 -ry
參數。
rm -r B/*
zip -ry B/A.zip A/
unzip B/A.zip -d B/
那麼這樣有什麼區別呢?
du A/
Output:
這邊是原本的檔案。以下則是新解壓縮的 A 資料夾:
du B/A
Output:
可以看到,軟連結是有生效的。