濮阳杆衣贸易有限公司

主頁 > 知識庫 > 在Linux上識別同樣內容的文件詳解

在Linux上識別同樣內容的文件詳解

熱門標簽:廣州電銷機器人系統(tǒng)圖 長沙開福怎么申請400電話 江蘇電銷外呼防封系統(tǒng)是什么 金融行業(yè)外呼線路 百度地圖標注要不要錢 智能電話機器人線路 賀州市地圖標注app 東莞人工智能電銷機器人供應商 高德地圖標注無營業(yè)執(zhí)照

前言

有時文件副本相當于對硬盤空間的巨大浪費,并會在你想要更新文件時造成困擾。以下是用來識別這些文件的六個命令。

在最近的帖子中,我們看了 如何識別并定位硬鏈接的文件 (即,指向同一硬盤內容并共享 inode)。在本文中,我們將查看能找到具有相同 內容 ,卻不相鏈接的文件的命令。

硬鏈接很有用是因為它們能夠使文件存放在文件系統(tǒng)內的多個地方卻不會占用額外的硬盤空間。另一方面,有時文件副本相當于對硬盤空間的巨大浪費,在你想要更新文件時也會有造成困擾之虞。在本文中,我們將看一下多種識別這些文件的方式。

用 diff 命令比較文件

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

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

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

$ diff home.html index.html
$

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

使用校驗和

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

$ cksum *.html
2819078353 228029 backup.html
4073570409 227985 home.html
4073570409 227985 index.html

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

使用 find 命令

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

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

使用 fslint 命令

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

$ fslint .
-----------------------------------file name lint
-------------------------------Invalid utf8 names
-----------------------------------file case lint
----------------------------------DUPlicate files  <==
home.html
index.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ù)搜尋”,并且它能夠基于文件日期判斷哪個文件是原件——這在你選擇刪除副本時很有用因為它會移除較新的文件。

$ 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 KiB
Removed 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 unique
Totally, 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 KiB
Removed 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 命令同樣使得識別重復文件變得簡單。它同時提供了大量有用的選項——例如用來迭代的 -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 系統(tǒng)提供能夠定位并(潛在地)能移除重復文件的一系列的好工具,以及能讓你指定搜索區(qū)域及當對你所發(fā)現(xiàn)的重復文件時的處理方式的選項。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

via: https://www.networkworld.com/article/3390204/how-to-identify-same-content-files-on-linux.html#tk.rss_all

作者: Sandra Henry-Stocker 選題: lujun9972 譯者: tomjlw 校對: wxy

標簽:玉樹 北京 永州 洛陽 滄州 張家界 松原 廊坊

巨人網(wǎng)絡通訊聲明:本文標題《在Linux上識別同樣內容的文件詳解》,本文關鍵詞  在,Linux,上,識別,同樣,內容,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《在Linux上識別同樣內容的文件詳解》相關的同類信息!
  • 本頁收集關于在Linux上識別同樣內容的文件詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    浮梁县| 茌平县| 茶陵县| 廊坊市| 明光市| 方城县| 土默特右旗| 黄冈市| 清水县| 尉犁县| 扶风县| 靖远县| 钟祥市| 延津县| 阿拉善左旗| 台东市| 襄城县| 巩留县| 芜湖县| 轮台县| 永宁县| 陵水| 衡水市| 石家庄市| 长乐市| 双峰县| 湛江市| 仪陇县| 应城市| 东乡族自治县| 昌吉市| 龙里县| 文山县| 德钦县| 平乐县| 德清县| 万全县| 鄂州市| 洛隆县| 抚松县| 兴文县|