Files

查找重複文件

  • December 21, 2021

是否可以在我的磁碟上找到相同但文件名不同的重複文件?

fdupes可以做到這一點。來自man fdupes

在給定路徑中搜尋重複文件。通過比較文件大小和 MD5 簽名,然後逐字節比較來找到此類文件。

在 Debian 或 Ubuntu 中,您可以使用apt-get install fdupes. 在 Fedora/Red Hat/CentOS 中,您可以使用yum install fdupes. 在 Arch Linux 上你可以使用pacman -S fdupes.,在 Gentoo 上,emerge fdupes.

要從文件系統根目錄執行檢查,這可能會花費大量時間和記憶體,請使用類似fdupes -r /.

如評論中所述,您可以通過執行以下操作獲得最大的重複項:

fdupes -r . | {
   while IFS= read -r file; do
       [[ $file ]] && du "$file"
   done
} | sort -n

如果您的文件名包含換行符,這將中斷。

另一個好工具是fslint

fslint 是一個工具集,用於查找文件系統的各種問題,包括重複文件和有問題的文件名等。

除了 GUI 之外,還提供了單獨的命令行工具,要訪問它們,可以在標準安裝中更改或添加到 $PATH 的 /usr/share/fslint/fslint 目錄。該目錄中的每個命令都有一個 –help 選項,該選項進一步詳細說明了它的參數。

   findup - find DUPlicate files

在基於 debian 的系統上,您可以使用以下命令安裝它:

sudo apt-get install fslint

如果您不想或無法安裝第三方工具,也可以手動執行此操作。大多數此類程序的工作方式是計算文件校驗和。具有相同 md5sum 的文件幾乎肯定包含完全相同的數據。所以,你可以這樣做:

find / -type f -exec md5sum {} \; > md5sums
awk '{print $1}' md5sums | sort | uniq -d > dupes
while read -r d; do echo "---"; grep -- "$d" md5sums | cut -d ' ' -f 2-; done < dupes 

範例輸出(此範例中的文件名相同,但不同時也可以使用):

$ while read -r d; do echo "---"; grep -- "$d" md5sums | cut -d ' ' -f 2-; done < dupes 
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/if_bonding.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/if_bonding.h
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/route.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/route.h
---
/usr/src/linux-headers-3.2.0-3-common/include/drm/Kbuild
/usr/src/linux-headers-3.2.0-4-common/include/drm/Kbuild
---

這將比已經提到的專用工具慢得多,但它會起作用

引用自:https://unix.stackexchange.com/questions/71176