如何在 Linux 上從 .tar.gz 或 .tar.bz2 文件中提取文件
已發表: 2022-01-29Tar 文件是壓縮檔案。 在使用 Ubuntu 等 Linux 發行版甚至在 macOS 上使用終端時,您會經常遇到它們。 下面介紹如何提取或解壓縮 tar 文件(也稱為 tarball)的內容。
.tar.gz 和 .tar.bz2 是什麼意思?
具有.tar.gz
或.tar.bz2
擴展名的文件是壓縮存檔文件。 只有.tar
擴展名的文件是未壓縮的,但這種情況非常罕見。
文件擴展名的.tar
部分代表 tape ar cive ,這也是這兩種文件類型都被稱為 tar 文件的原因。 tar 文件的歷史可以追溯到 1979 年,當時創建了tar
命令以允許系統管理員將文件存檔到磁帶上。 四十年後,我們仍在使用tar
命令將 tar 文件解壓到硬盤上。 某個地方的某個人可能仍在使用tar
和磁帶。
.gz
或.bz2
擴展後綴表示存檔已被壓縮,使用gzip
或bzip2
壓縮算法。 tar
命令可以很好地處理這兩種類型的文件,因此使用哪種壓縮方法並不重要——而且它應該在您擁有 Bash shell 的任何地方都可用。 您只需要使用適當的tar
命令行選項。
從 Tar 文件中提取文件
假設您下載了兩個活頁樂譜文件。 一個文件名為ukulele_songs.tar.gz
,另一個文件名為guitar_songs.tar.bz2
。 這些文件位於下載目錄中。
讓我們提取四弦琴歌曲:
tar -xvzf ukulele_songs.tar.gz
提取文件後,它們將列在終端窗口中。
我們使用的命令行選項是:
- -x :從 tar 文件中提取、檢索文件。
- -v :詳細,列出正在提取的文件。
- -z : Gzip,使用 gzip 解壓 tar 文件。
- -f :文件,我們希望
tar
使用的 tar 文件的名稱。 此選項後必須跟 tar 文件的名稱。
使用ls
列出目錄中的文件,您會看到創建了一個名為 Ukulele Songs 的目錄。 提取的文件位於該目錄中。 這個目錄是從哪裡來的? 它包含在tar
文件中,並與文件一起提取。
現在讓我們提取吉他歌曲。 為此,我們將使用與以前幾乎完全相同的命令,但有一個重要區別。 .bz2
擴展名後綴告訴我們它已使用 bzip2 命令壓縮。 我們將使用-j
(bzip2) 選項,而不是使用-z
(gzip) 選項。
tar -xvjf guitar_songs.tar.bz2
再一次,文件在提取時被列在終端上。 需要明確的是,我們在.tar.bz2
文件中使用tar
的命令行選項是:
- -x :從 tar 文件中提取、檢索文件。
- -v :詳細,列出正在提取的文件。
- -j :bzip2,使用bzip2解壓tar文件。
- -f :文件,我們希望 tar 使用的 tar 文件的名稱。
如果我們列出下載目錄中的文件,我們將看到另一個名為 Guitar Songs 的目錄已創建。
選擇將文件提取到的位置
如果我們想將文件提取到當前目錄以外的位置,我們可以使用-C
(指定目錄)選項指定目標目錄。
tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/
查看我們的 Documents/Songs 目錄,我們將看到 Guitar Songs 目錄已創建。
請注意,目標目錄必須已經存在,如果不存在, tar
將不會創建它。 如果您需要創建一個目錄並讓tar
在一個命令中將文件全部解壓到其中,您可以按如下方式進行:
mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/
-p
(parents) 選項使mkdir
創建所需的任何父目錄,確保創建目標目錄。
在提取 Tar 文件之前查看它們
到目前為止,我們剛剛邁出了信心的一步,並在看不見的情況下提取了文件。 您可能想在跳躍之前先看看。 您可以使用-t
(列表)選項在提取tar
文件之前查看它的內容。 通過less
命令管道輸出通常很方便。
tar -tf ukulele_songs.tar.gz | 較少的
請注意,我們不需要使用-z
選項來列出文件。 我們只需要在從.tar.gz
文件中提取文件時添加-z
選項。 同樣,我們不需要-j
選項來列出tar.bz2
文件中的文件。
滾動查看輸出,我們可以看到 tar 文件中的所有內容都保存在一個名為 Ukulele Songs 的目錄中,並且在該目錄中,還有文件和其他目錄。
我們可以看到 Ukulele Songs 目錄包含名為 Random Songs、Ramones 和 Possibles 的目錄。
要從 tar 文件中的目錄中提取所有文件,請使用以下命令。 請注意,路徑用引號引起來,因為路徑中有空格。
tar -xvzf ukulele_songs.tar.gz "尤克里裡歌曲/Ramones/"
要提取單個文件,請提供文件的路徑和名稱。
tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"
您可以使用通配符提取選定的文件,其中*
表示任何字符串,而?
代表任何單個字符。 使用通配符需要使用--wildcards
選項。
tar -xvz --wildcards -f ukulele_songs.tar.gz "尤克里裡歌曲/可能/B*"
提取文件而不提取目錄
如果您不希望在硬盤驅動器上重新創建 tar 文件中的目錄結構,請使用--strip-components
選項。 --strip-components
選項需要一個數字參數。 該數字表示要忽略的目錄級別。 仍會提取忽略目錄中的文件,但不會將目錄結構複製到硬盤上。
如果我們在示例 tar 文件中指定--strip-components=1
,則不會在硬盤驅動器上創建 tar 文件中的 Ukulele Songs 最頂層目錄。 將被提取到該目錄的文件和目錄將被提取到目標目錄中。
tar -xvzf ukulele_songs.tar.gz --strip-components=1
在我們的示例 tar 文件中只有兩級目錄嵌套。 所以如果我們使用--strip-components=2
,所有文件都被提取到目標目錄中,並且不會創建其他目錄。
tar -xvzf ukulele_songs.tar.gz --strip-components=2
如果您查看 Linux 手冊頁,您會發現tar
必須是“具有最多命令行選項的命令”標題的理想候選者。 值得慶幸的是,為了讓我們能夠從.tar.gz
和tar.bz2
文件中提取文件並進行良好的粒度控制,我們只需要記住其中的幾個選項。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·類型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 別名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超時·牆·是·殺死·睡眠· sudo · su ·時間· groupadd · usermod ·組· lshw ·關機·重啟·暫停·關機· passwd · lscpu · crontab ·日期· bg · fg | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相關:適合開發人員和愛好者的最佳 Linux 筆記本電腦