在本文中,我們將探討macOS作業系統副本中附帶的不同命令。有大量不同的命令可供選擇。這些命令中有很多是用來操作文件或處理文本的。
在我們開始之前,我們將需要文件來操作,這樣你就可以跟著做了。如果你有把握,你可以使用自己的文件作為源頭。
我們需要大塊的文本。也許值得在你的主目錄中專門為下一步創建一個文件夾。另外,如果你想使用一個臨時目錄,這個目錄會在下次系統重啟時自動刪除,你可以使用這個命令:
這將創建一個臨時目錄,並將其cd到其中。
每次運行它,你會在不同的臨時目錄中結束,所以要注意你最終的位置,而不是多次運行它。
% cd "$(mktemp -d)"% pwd/var/folders/5z/tnwhfkg57hdfys5fxckr07_h0000gn/T/tmp.QPg0xWOB我們需要下載我的充滿文本文件的檔案,使用curl命令。
% curl --location -o master.zip https://github.com/hackzilla/random-files/archive/master.zip如果一切順利,你應該在你當前的目錄下有一個文件,叫做master.zip。請注意你運行這個命令的位置,因為這將是存儲下載的地方。如果有疑問,運行pwd命令。
我將假設你把master.zip下載到了你的主目錄下。
無論是為了節省空間,還是為了節省帶寬,歸根結底,壓縮就是為了省錢。壓縮就是以一種可逆的方式減少文件的大小。
也就是說,每一種壓縮方法,都會有一種解壓文件的方法。我將向你展示兩種常見的壓縮形式--zip和gzip--你將在網際網路上遇到。你將會看到每一種壓縮方法的操作。我們將下載幾個檔案,並在本章中使用它們。
當我想到zip壓縮時,我就會想起PKZIP和WinZip。這些都是在DOS和Windows上壓縮和解壓文件和文件夾的程序。你可能不知道的是,PKZIP是由一家叫PKWARE的公司製作的。PKWARE的創始人Phil Katz在1989年將這種文件格式發布到公共領域。不久之後,有一個叫Info-ZIP的項目,發布了壓縮和解壓文件的開源實用程序。我們將使用之前下載的master.zip文件。
1. 解壓:
解壓是指將一個單一的壓縮檔案,從裡面提取文件和文件夾的過程。由於我們已經有了一個壓縮文件,所以我們需要先對文件進行解壓,也叫解壓。
解壓zip文件的命令是unzip ,如下:
% unzip --helpUnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler. Sendbug reports using http:Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] Default action is to extract files in list, except those in xlist, to exdir; file[.zip] may be a wildcard.2. 測試Zip文件的完整性:
在我們從master.zip中解壓文件之前,我們應該使用-t選項驗證下載的存檔是否正確。這將會比較存檔和存儲在存檔中的文件的校驗和。
% unzip -t master.zipArchive: master.zip025d101299c770c5f305e731cce76368c7201fb0 testing: random-files-master/OK testing: random-files-master/Readme.md OK ...No errors detected in compressed data of master.zip.如果文件下載時出現錯誤,您應該嘗試重新下載。如果在存檔中沒有檢測到錯誤,你可以繼續。
3. 列出壓縮文件的內容:
如果你想在解壓之前了解一個壓縮文件的內容,你可以用 -l 選項查看它的內容。
% unzip -l master.zipArchive: master.zip025d101299c770c5f305e731cce76368c7201fb0 Length Date Time Name---- ---- 0 11-16-2019 22:20 random-files-master/ 64 11-16-2019 22:20 random-files-master/Readme.md 3857 11-16-2019 22:20 random-files-master/bible.txt 9500 11-16-2019 22:20 random-files-master/decamerone.txt 2419 11-16-2019 22:20 random-files-master/faust.txt 3178 11-16-2019 22:20 random-files-master/fleurs.txt 2094 11-16-2019 22:20 random-files-master/lorem.txt 2885 11-16-2019 22:20 random-files-master/raven.txt 2642 11-16-2019 22:20 random-files-master/spook.txt 458 11-16-2019 22:20 random-files-master/strandberg.txt 4691 11-16-2019 22:20 random-files-master/strindberg.txt 5125 11-16-2019 22:20 random-files-master/walden.txt---- -- 36913 12 files你應該注意的是,這個列表中的文件是否在一個文件夾中。在這個例子中,文件是在一個叫隨機文件的目錄中。你最不想做的就是展開一個壓縮包,然後所有的文件都出現在你的主目錄中。
如果壓縮包不包含一個目錄,你可以很容易地創建一個目錄,並將壓縮包移入,在解壓文件之前,所有的文件都會出現在這個目錄中。
% mkdir random-files-master% mv master.zip random-files-master現在我們知道在home目錄下展開是安全的,我們可以解壓它。
% unzip master.zipArchive: master.zip025d101299c770c5f305e731cce76368c7201fb0 creating: random-files-master/ inflating: random-files-master/Readme.md inflating: random-files-master/bible.txt inflating: random-files-master/decamerone.txt ...現在,你會發現在你當前的目錄中,有一個名為隨機文件-主目錄,它包含了壓縮文件中的所有文件。這就是從壓縮文件中提取文件的基本過程。
4. 壓縮:
說到解壓,就不能不提創建壓縮包的過程。
% zip --helpCopyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.Zip 3.0 (July 5th 2008).當涉及到壓縮文件時,你有更多的選擇。
你想讓存檔更小或更快地壓縮和解壓嗎?你想不想對內容進行加密?
之前,你看到master.zip的所有文件都存儲在一個叫隨機文件的目錄中。現在,你可以看到從文件文件夾中創建zip文件時的區別。zip命令包含了你當前目錄的完整目錄路徑。
% zip with-directory.zip random-files-master注意:如果你使用 ~ tilde 符號,zip 命令將包含完整的目錄。
% zip with-directory.zip ~/random-files-master/* adding: Users/danielplatt/random-files-master/BinaryEncoding.md (deflated 74%)如果你想在沒有父目錄的情況下創建存檔,你需要在隨機文件目錄下。
% cd random-files-master% zip without-directory.zip * adding: BinaryEncoding.md (deflated 74%)5. 調整檔案的大小:
有一個選項可以改變使用zip的壓縮程度,從無壓縮到最慢的壓縮。壓縮的速度越慢,計算機花在壓縮檔案上的時間就越多。
在下面的命令中,#被一個從0到9的數字代替。0是沒有壓縮,1是最快的壓縮,9是最慢的壓縮。如果沒有提供這個選項,zip將使用默認值6。
如果你想把壓縮文件做得越小越好,你會使用-9。
% zip -9 with-directory.zip random-files-master6. 加密檔案:
當創建壓縮包時,你可以選擇使用-e選項啟用加密,然後為壓縮包指定一個密碼。如果你要在網際網路上傳輸敏感信息,或者你想把敏感信息存儲在拇指驅動器上,但又想確保如果有人找到它,他們無法讀取文件。
% zip -e with-directory.zip random-files-master/*Enter password:Verify password:值得注意的是,文件是以每個文件為基礎進行加密的,而不是對整個存檔進行加密。這意味著你仍然可以看到存檔的文件列表。你可以通過對存檔進行加密重新壓縮來防止該列表。
使用加密解壓就像運行解壓命令一樣簡單。當解壓遇到加密文件時,系統會提示您輸入密碼。
% unzip with-directory.zipArchive: with-directory.zip[with-directory.zip] random-files-master/BinaryEncoding.md password:7. 壓縮目錄:
最後要提到的是,如果你試圖壓縮一個有其他目錄的目錄,你當前使用的命令會跳過這些目錄。你需要使用-r選項告訴zip遞歸地進入這些文件夾。
% zip -r with-directory.zip random-files-master1992年,在zip文件格式發布到公共領域幾年後,第一個版本的gzip就出現了。
% gzip --helpApple gzip 287.40.2usage: gzip [-123456789acdfhklLNnqrtVv] [-S .suffix] [<file> [<file> ...]] -1 --fast fastest (worst) compression -2 .. -8 set compression level -9 --best best (slowest) compressiongzip和zip壓縮之間有很多相似之處。與gzip的一個很大的區別是,它不會將多個文件壓縮成一個檔案。你可以嘗試用-r選項壓縮整個文件夾。
% gzip -r random-files-master% ls random-files-masterBinaryEncoding.md.gz FAQ.md.gz LICENSE.gz README.md.gz UseCases.md.gzgzip會單獨壓縮每個文件。你可以用-d選項反轉這個過程。
% gzip -rd random-files-master如果gzip不能壓縮超過一個文件,那麼它可以用來做什麼呢?一個例子是日誌文件。它們通常會被旋轉,以防止它們變得太大。有時它們是按時間(日或周)輪換的,有時是按大小輪換的。
% ls -l /var/log/system.log*那用gzip壓縮多個文件呢?有一個解決辦法,那就是備份到磁帶上。
Tar
你可能更熟悉電腦上的SSD和拇指驅動器的存儲。然而,當你試圖備份大量數據時,這些形式的存儲最終將非常昂貴。
磁帶存儲是一種在小空間內存儲大量數據的較便宜的方式。從圖3-1可以看出,一盤磁帶最多可存儲30TB的數據。以磁帶機的價格,你可以買一個僅能容納6TB的硬碟。
當備份到磁帶時,你需要將文件系統轉換為可以寫入磁帶存檔的單一數據流。這樣做的命令叫做tar。
% tar tar(bsdtar): manipulate archive filesFirst option must be a mode specifier: -c Create -r Add/Replace -t List -u Update -x Extract使用 tar,我們可以使用 -c 創建一個存檔,並使用 gzip 和 -z 壓縮它。你還需要提供 -f 來將結果的存檔保存到文件中。否則,存檔將被輸出到終端。
% tar -czf master.tar.gz random-files-master現在你已經有了你的 tar 存檔文件,你可以用 -t 選項查看它的內部。
% tar -tf master.tar.gzrandom-files/random-files/HighLevelGoals.mdrandom-files/NonWeb.mdrandom-files/Tooling.mdrandom-files/TextFormat.mdrandom-files/MVP.mdrandom-files/LICENSE你可以使用 -x 選項從 tar 存檔中提取文件。