溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Linux上識別同樣內容的文件

發(fā)布時間:2021-10-22 16:47:45 來源:億速云 閱讀:138 作者:小新 欄目:系統(tǒng)運維

這篇文章將為大家詳細講解有關怎么在Linux上識別同樣內容的文件,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

用 diff 命令比較文件

可能比較兩個文件最簡單的方法是使用 diff 命令。輸出會顯示你文件的不同之處。<> 符號代表在當參數(shù)傳過來的***個(<)或第二個(>)文件中是否有額外的文字行。在這個例子中,在 backup.html 中有額外的文字行。

$ diff index.html backup.html2438a2439,2441> <pre>> That's all there is to report.> </pre>

如果 diff 沒有輸出那代表兩個文件相同。

$ diff home.html index.html$

diff 的***缺點是它一次只能比較兩個文件并且你必須指定用來比較的文件,這篇帖子中的一些命令可以為你找到多個重復文件。

使用校驗和

cksum(checksum) 命令計算文件的校驗和。校驗和是一種將文字內容轉化成一個長數(shù)字(例如2819078353 228029)的數(shù)學簡化。雖然校驗和并不是完全獨有的,但是文件內容不同校驗和卻相同的概率微乎其微。

$ cksum *.html2819078353 228029 backup.html4073570409 227985 home.html4073570409 227985 index.html

在上述示例中,你可以看到產生同樣校驗和的第二個和第三個文件是如何可以被默認為相同的。

使用 find 命令

雖然 find 命令并沒有尋找重復文件的選項,它依然可以被用來通過名字或類型尋找文件并運行 cksum 命令。例如:

$ find . -name "*.html" -exec cksum {} \;4073570409 227985 ./home.html2819078353 228029 ./backup.html4073570409 227985 ./index.html

使用 fslint 命令

fslint 命令可以被特地用來尋找重復文件。注意我們給了它一個起始位置。如果它需要遍歷相當多的文件,這就需要花點時間來完成。注意它是如何列出重復文件并尋找其它問題的,比如空目錄和壞 ID。

$ fslint .-----------------------------------file name lint-------------------------------Invalid utf8 names-----------------------------------file case lint----------------------------------DUPlicate files   <==home.htmlindex.html-----------------------------------Dangling links--------------------redundant characters in links------------------------------------suspect links--------------------------------Empty Directories./.gnupg----------------------------------Temporary Files----------------------duplicate/conflicting Names------------------------------------------Bad ids-------------------------Non Stripped executables

你可能需要在你的系統(tǒng)上安裝 fslint。你可能也需要將它加入你的命令搜索路徑:

$ export PATH=$PATH:/usr/share/fslint/fslint

使用 rdfind 命令

rdfind 命令也會尋找重復(相同內容的)文件。它的名字意即“重復數(shù)據(jù)搜尋”,并且它能夠基于文件日期判斷哪個文件是原件&mdash;&mdash;這在你選擇刪除副本時很有用因為它會移除較新的文件。

$ rdfind ~Now scanning "/home/shark", found 12 files.Now have 12 files in total.Removed 1 files due to nonunique device and inode.Total size is 699498 bytes or 683 KiBRemoved 9 files due to unique sizes from list.2 files left.Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.It seems like you have 2 files that are not uniqueTotally, 223 KiB can be reduced.Now making results file results.txt

你可以在 dryrun 模式中運行這個命令 (換句話說,僅僅匯報可能會另外被做出的改動)。

$ rdfind -dryrun true ~(DRYRUN MODE) Now scanning "/home/shark", found 12 files.(DRYRUN MODE) Now have 12 files in total.(DRYRUN MODE) Removed 1 files due to nonunique device and inode.(DRYRUN MODE) Total size is 699352 bytes or 683 KiBRemoved 9 files due to unique sizes from list.2 files left.(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.(DRYRUN MODE) Now eliminating candidates based on sha1 checksum:removed 0 files from list.2 files left.(DRYRUN MODE) It seems like you have 2 files that are not unique(DRYRUN MODE) Totally, 223 KiB can be reduced.(DRYRUN MODE) Now making results file results.txt

rdfind 命令同樣提供了類似忽略空文檔(-ignoreempty)和跟蹤符號鏈接(-followsymlinks)的功能。查看 man 頁面獲取解釋。

-ignoreempty       ignore empty files-minsize        ignore files smaller than speficied size-followsymlinks     follow symbolic links-removeidentinode   remove files referring to identical inode-checksum       identify checksum type to be used-deterministic      determiness how to sort files-makesymlinks       turn duplicate files into symbolic links-makehardlinks      replace duplicate files with hard links-makeresultsfile    create a results file in the current directory-outputname     provide name for results file-deleteduplicates   delete/unlink duplicate files-sleep          set sleep time between reading files (milliseconds)-n, -dryrun     display what would have been done, but don't do it

注意 rdfind 命令提供了 -deleteduplicates true 的設置選項以刪除副本。希望這個命令語法上的小問題不會惹惱你。;-)

$ rdfind -deleteduplicates true ....Deleted 1 files.    <==

你將可能需要在你的系統(tǒng)上安裝 rdfind 命令。試驗它以熟悉如何使用它可能是一個好主意。

使用 fdupes 命令

fdupes 命令同樣使得識別重復文件變得簡單。它同時提供了大量有用的選項&mdash;&mdash;例如用來迭代的 -r。在這個例子中,它像這樣將重復文件分組到一起:

$ fdupes ~/home/shs/UPGRADE/home/shs/mytwin /home/shs/lp.txt/home/shs/lp.man /home/shs/penguin.png/home/shs/penguin0.png/home/shs/hideme.png

這是使用迭代的一個例子,注意許多重復文件是重要的(用戶的 .bashrc.profile 文件)并且不應被刪除。

# fdupes -r /home/home/shark/home.html/home/shark/index.html /home/dory/.bashrc/home/eel/.bashrc /home/nemo/.profile/home/dory/.profile/home/shark/.profile /home/nemo/tryme/home/shs/tryme /home/shs/arrow.png/home/shs/PNGs/arrow.png /home/shs/11/files_11.zip/home/shs/ERIC/file_11.zip /home/shs/penguin0.jpg/home/shs/PNGs/penguin.jpg/home/shs/PNGs/penguin0.jpg /home/shs/Sandra_rotated.png/home/shs/PNGs/Sandra_rotated.png

fdupe 命令的許多選項列如下。使用 fdupes -h 命令或者閱讀 man 頁面獲取詳情。

-r --recurse     recurse-R --recurse:    recurse through specified directories-s --symlinks    follow symlinked directories-H --hardlinks   treat hard links as duplicates-n --noempty     ignore empty files-f --omitfirst   omit the first file in each set of matches-A --nohidden    ignore hidden files-1 --sameline    list matches on a single line-S --size        show size of duplicate files-m --summarize   summarize duplicate files information-q --quiet       hide progress indicator-d --delete      prompt user for files to preserve-N --noprompt    when used with --delete, preserve the first file in set-I --immediate   delete duplicates as they are encountered-p --permissions don't soncider files with different owner/group or                 permission bits as duplicates-o --order=WORD  order files according to specification-i --reverse     reverse order while sorting-v --version     display fdupes version-h --help        displays help

fdupes 命令是另一個你可能需要安裝并使用一段時間才能熟悉其眾多選項的命令。

關于“怎么在Linux上識別同樣內容的文件”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI