歡迎光臨
每天分享高質量文章

如何在 Linux 中找到並刪除重覆檔案 | Linux 中國

如果你們像我一樣,在類 Unix 作業系統中,大量多版本的相同檔案放在不同的備份目錄,你可以使用下麵的工具找到並刪除重覆檔案。
— Sk


致謝
編譯自 | 
https://www.ostechnix.com/how-to-find-and-delete-duplicate-files-in-linux/
 
 作者 | Sk
 譯者 | Andy Luo (pygmalion666) ??共計翻譯:2.0 篇 貢獻時間:192 天

在編輯或修改配置檔案或舊檔案前,我經常會把它們備份到硬碟的某個地方,因此我如果意外地改錯了這些檔案,我可以從備份中恢復它們。但問題是如果我忘記清理備份檔案,一段時間之後,我的磁碟會被這些大量重覆檔案填滿 —— 我覺得要麼是懶得清理這些舊檔案,要麼是擔心可能會刪掉重要檔案。如果你們像我一樣,在類 Unix 作業系統中,大量多版本的相同檔案放在不同的備份目錄,你可以使用下麵的工具找到並刪除重覆檔案。

提醒一句:

在刪除重覆檔案的時請儘量小心。如果你不小心,也許會導致意外丟失資料[1]。我建議你在使用這些工具的時候要特別註意。

在 Linux 中找到並刪除重覆檔案

出於本指南的目的,我將討論下麵的三個工具:

1. Rdfind
2. Fdupes
3. FSlint

這三個工具是自由開源的,且執行在大多數類 Unix 系統中。

1. Rdfind

Rdfind 意即 redundant data find(冗餘資料查詢),是一個透過訪問目錄和子目錄來找出重覆檔案的自由開源的工具。它是基於檔案內容而不是檔案名來比較。Rdfind 使用排序演演算法來區分原始檔案和重覆檔案。如果你有兩個或者更多的相同檔案,Rdfind 會很智慧的找到原始檔案並認定剩下的檔案為重覆檔案。一旦找到副本檔案,它會向你報告。你可以決定是刪除還是使用硬連結或者符號(軟)連結[2]代替它們。

安裝 Rdfind

Rdfind 存在於 AUR[3] 中。因此,在基於 Arch 的系統中,你可以像下麵一樣使用任一如 Yay[4] AUR 程式助手安裝它。

  1. $ yay -S rdfind

在 Debian、Ubuntu、Linux Mint 上:

  1. $ sudo apt-get install rdfind

在 Fedora 上:

  1. $ sudo dnf install rdfind

在 RHEL、CentOS 上:

  1. $ sudo yum install epel-release

  2. $ sudo yum install rdfind

用法

一旦安裝完成,僅帶上目錄路徑執行 Rdfind 命令就可以掃描重覆檔案。

  1. $ rdfind ~/Downloads

正如你看到上面的截圖,Rdfind 命令將掃描 ~/Downloads 目錄,並將結果儲存到當前工作目錄下一個名為 results.txt 的檔案中。你可以在 results.txt 檔案中看到可能是重覆檔案的名字。

  1. $ cat results.txt

  2. # Automatically generated

  3. # duptype id depth size device inode priority name

  4. DUPTYPE_FIRST_OCCURRENCE 1469 8 9 2050 15864884 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test5.regex

  5. DUPTYPE_WITHIN_SAME_TREE -1469 8 9 2050 15864886 1 /home/sk/Downloads/tor-browser_en-US/Browser/TorBrowser/Tor/PluggableTransports/fte/tests/dfas/test6.regex

  6. [...]

  7. DUPTYPE_FIRST_OCCURRENCE 13 0 403635 2050 15740257 1 /home/sk/Downloads/Hyperledger(1).pdf

  8. DUPTYPE_WITHIN_SAME_TREE -13 0 403635 2050 15741071 1 /home/sk/Downloads/Hyperledger.pdf

  9. # end of file

透過檢查 results.txt 檔案,你可以很容易的找到那些重覆檔案。如果願意你可以手動的刪除它們。

此外,你可在不修改其他事情情況下使用 -dryrun 選項找出所有重覆檔案,併在終端上輸出彙總資訊。

  1. $ rdfind -dryrun true ~/Downloads

一旦找到重覆檔案,你可以使用硬連結或符號連結代替他們。

使用硬連結代替所有重覆檔案,執行:

  1. $ rdfind -makehardlinks true ~/Downloads

使用符號連結/軟連結代替所有重覆檔案,執行:

  1. $ rdfind -makesymlinks true ~/Downloads

目錄中有一些空檔案,也許你想忽略他們,你可以像下麵一樣使用 -ignoreempty 選項:

  1. $ rdfind -ignoreempty true ~/Downloads

如果你不再想要這些舊檔案,刪除重覆檔案,而不是使用硬連結或軟連結代替它們。

刪除重覆檔案,就執行:

  1. $ rdfind -deleteduplicates true ~/Downloads

如果你不想忽略空檔案,並且和所喲重覆檔案一起刪除。執行:

  1. $ rdfind -deleteduplicates true -ignoreempty false ~/Downloads

更多細節,參照幫助部分:

  1. $ rdfind --help

手冊頁:

  1. $ man rdfind

2. Fdupes

Fdupes 是另一個在指定目錄以及子目錄中識別和移除重覆檔案的命令列工具。這是一個使用 C 語言編寫的自由開源工具。Fdupes 透過對比檔案大小、部分 MD5 簽名、全部 MD5 簽名,最後執行逐個位元組對比校驗來識別重覆檔案。

與 Rdfind 工具類似,Fdupes 附帶非常少的選項來執行操作,如:

◈ 在目錄和子目錄中遞迴的搜尋重覆檔案
◈ 從計算中排除空檔案和隱藏檔案
◈ 顯示重覆檔案大小
◈ 出現重覆檔案時立即刪除
◈ 使用不同的擁有者/組或許可權位來排除重覆檔案
◈ 更多

安裝 Fdupes

Fdupes 存在於大多數 Linux 發行版的預設倉庫中。

在 Arch Linux 和它的變種如 Antergos、Manjaro Linux 上,如下使用 Pacman 安裝它。

  1. $ sudo pacman -S fdupes

在 Debian、Ubuntu、Linux Mint 上:

  1. $ sudo apt-get install fdupes

在 Fedora 上:

  1. $ sudo dnf install fdupes

在 RHEL、CentOS 上:

  1. $ sudo yum install epel-release

  2. $ sudo yum install fdupes

用法

Fdupes 用法非常簡單。僅執行下麵的命令就可以在目錄中找到重覆檔案,如:~/Downloads

  1. $ fdupes ~/Downloads

我係統中的樣例輸出:

  1. /home/sk/Downloads/Hyperledger.pdf

  2. /home/sk/Downloads/Hyperledger(1).pdf

你可以看到,在 /home/sk/Downloads/ 目錄下有一個重覆檔案。它僅顯示了父級目錄中的重覆檔案。如何顯示子目錄中的重覆檔案?像下麵一樣,使用 -r 選項。

  1. $ fdupes -r ~/Downloads

現在你將看到 /home/sk/Downloads/ 目錄以及子目錄中的重覆檔案。

Fdupes 也可用來從多個目錄中迅速查詢重覆檔案。

  1. $ fdupes ~/Downloads ~/Documents/ostechnix

你甚至可以搜尋多個目錄,遞迴搜尋其中一個目錄,如下:

  1. $ fdupes ~/Downloads -r ~/Documents/ostechnix

上面的命令將搜尋 ~/Downloads 目錄,~/Documents/ostechnix 目錄和它的子目錄中的重覆檔案。

有時,你可能想要知道一個目錄中重覆檔案的大小。你可以使用 -S 選項,如下:

  1. $ fdupes -S ~/Downloads

  2. 403635 bytes each:

  3. /home/sk/Downloads/Hyperledger.pdf

  4. /home/sk/Downloads/Hyperledger(1).pdf

類似的,為了顯示父目錄和子目錄中重覆檔案的大小,使用 -Sr 選項。

我們可以在計算時分別使用 -n 和 -A 選項排除空白檔案以及排除隱藏檔案。

  1. $ fdupes -n ~/Downloads

  2. $ fdupes -A ~/Downloads

在搜尋指定目錄的重覆檔案時,第一個命令將排除零長度檔案,後面的命令將排除隱藏檔案。

彙總重覆檔案資訊,使用 -m 選項。

  1. $ fdupes -m ~/Downloads

  2. 1 duplicate files (in 1 sets), occupying 403.6 kilobytes

刪除所有重覆檔案,使用 -d 選項。

  1. $ fdupes -d ~/Downloads

樣例輸出:

  1. [1] /home/sk/Downloads/Hyperledger Fabric Installation.pdf

  2. [2] /home/sk/Downloads/Hyperledger Fabric Installation(1).pdf

  3. Set 1 of 1, preserve files [1 - 2, all]:

這個命令將提示你保留還是刪除所有其他重覆檔案。輸入任一號碼保留相應的檔案,並刪除剩下的檔案。當使用這個選項的時候需要更加註意。如果不小心,你可能會刪除原檔案。

如果你想要每次保留每個重覆檔案集合的第一個檔案,且無提示的刪除其他檔案,使用 -dN 選項(不推薦)。

  1. $ fdupes -dN ~/Downloads

當遇到重覆檔案時刪除它們,使用 -I 標誌。

  1. $ fdupes -I ~/Downloads

關於 Fdupes 的更多細節,檢視幫助部分和 man 頁面。

  1. $ fdupes --help

  2. $ man fdupes

3. FSlint

FSlint 是另外一個查詢重覆檔案的工具,有時我用它去掉 Linux 系統中不需要的重覆檔案並釋放磁碟空間。不像另外兩個工具,FSlint 有 GUI 和 CLI 兩種樣式。因此對於新手來說它更友好。FSlint 不僅僅找出重覆檔案,也找出壞符號連結、壞名字檔案、臨時檔案、壞的使用者 ID、空目錄和非精簡的二進位制檔案等等。

安裝 FSlint

FSlint 存在於 AUR[5],因此你可以使用任一 AUR 助手安裝它。

  1. $ yay -S fslint

在 Debian、Ubuntu、Linux Mint 上:

  1. $ sudo apt-get install fslint

在 Fedora 上:

  1. $ sudo dnf install fslint

在 RHEL,CentOS 上:

  1. $ sudo yum install epel-release

  2. $ sudo yum install fslint

一旦安裝完成,從選單或者應用程式啟動器啟動它。

FSlint GUI 展示如下:

如你所見,FSlint 介面友好、一目瞭然。在 “Search path” 欄,新增你要掃描的目錄路徑,點選左下角 “Find” 按鈕查詢重覆檔案。驗證遞迴選項可以在目錄和子目錄中遞迴的搜尋重覆檔案。FSlint 將快速的掃描給定的目錄併列出重覆檔案。

從串列中選擇那些要清理的重覆檔案,也可以選擇 “Save”、“Delete”、“Merge” 和 “Symlink” 操作他們。

在 “Advanced search parameters” 欄,你可以在搜尋重覆檔案的時候指定排除的路徑。

FSlint 命令列選項

FSlint 提供下麵的 CLI 工具集在你的檔案系統中查詢重覆檔案。

◈ findup — 查詢重覆檔案
◈ findnl — 查詢名稱規範(有問題的檔案名)
◈ findu8 — 查詢非法的 utf8 編碼的檔案名
◈ findbl — 查詢壞連結(有問題的符號連結)
◈ findsn — 查詢同名檔案(可能有衝突的檔案名)
◈ finded — 查詢空目錄
◈ findid — 查詢死使用者的檔案
◈ findns — 查詢非精簡的可執行檔案
◈ findrs — 查詢檔案名中多餘的空白
◈ findtf — 查詢臨時檔案
◈ findul — 查詢可能未使用的庫
◈ zipdir — 回收 ext2 目錄項下浪費的空間

所有這些工具位於 /usr/share/fslint/fslint/fslint 下麵。

例如,在給定的目錄中查詢重覆檔案,執行:

  1. $ /usr/share/fslint/fslint/findup ~/Downloads/

類似的,找出空目錄命令是:

  1. $ /usr/share/fslint/fslint/finded ~/Downloads/

獲取每個工具更多細節,例如:findup,執行:

  1. $ /usr/share/fslint/fslint/findup --help

關於 FSlint 的更多細節,參照幫助部分和 man 頁。

  1. $ /usr/share/fslint/fslint/fslint --help

  2. $ man fslint

總結

現在你知道在 Linux 中,使用三個工具來查詢和刪除不需要的重覆檔案。這三個工具中,我經常使用 Rdfind。這並不意味著其他的兩個工具效率低下,因為到目前為止我更喜歡 Rdfind。好了,到你了。你的最喜歡哪一個工具呢?為什麼?在下麵的評論區留言讓我們知道吧。

就到這裡吧。希望這篇文章對你有幫助。更多的好東西就要來了,敬請期待。

謝謝!


via: https://www.ostechnix.com/how-to-find-and-delete-duplicate-files-in-linux/

作者:SK[7] 選題:lujun9972 譯者:pygmalion666 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂