Skip to content

[Linux] 使用壓縮指令時仍然保留軟連結

之前,我曾經在在以下這兩篇文章中,分別筆記了在 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:

這張圖片的 alt 屬性值為空,它的檔案名稱為 image-20.png

這邊是原本的檔案。以下則是新解壓縮的 A 資料夾:

du B/A

Output:

可以看到,軟連結是有生效的。


References

Tags:

Leave a Reply