Linuxのファイルに同じ内容を特定する方法

時々、ファイルのコピーは、ディスクスペースの巨大な廃棄物に相当し、あなたがファイルを更新する際に問題が発生します。次のコマンドは、これらのドキュメントの6を識別するために使用されます。

最近の記事では、我々は見て特定し、ファイルのハードリンクを見つける方法(すなわち、同じハードディスクおよびコンテンツ共有のinodeをポイント)。この記事では、我々は同じ見つけることになりますコンテンツを、しかし、コマンドファイルにリンクされていません。

ハードリンクは、彼らがローカルファイルシステムに保存されている複数のファイルを有効にするために有用であるが、余分なハードディスク領域を占有されることはありません。一方、時々ファイルのコピーは、ファイルを更新する際に苦痛を与える危険性があるだろうディスクスペースの巨大な廃棄物に相当します。この記事では、我々はこれらのファイルを識別するためのさまざまな方法を見ていきます。

diffコマンドは、ファイルを比較して

2つのファイルを比較することができる最も簡単な方法は、使用することですdiffコマンドを。出力は、あなたのファイルと異なる表示されます。<そして、>シンボルはオーバー渡されたパラメータを表す場合(最初の<)または第二(>ファイルのテキストの追加の行がある場合)。この例では、内backup.htmlのテキストの追加の行。

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

場合はdiff、同じ2つのファイルを表す出力はありません。

$ diff home.html index.html
$
复制代码

diff 唯一の欠点は、それが唯一の2つのファイルを比較することができ、あなたがこの記事は、いくつかのコマンドでは、あなたのための複数の重複ファイルを見つけることができ、比較するファイルを指定しなければならないということです。

チェックサムを使用します

cksum(チェックサム)チェックサムファイルを計算するコマンド。チェックサムは、長い数(例えば2,819,078,353,228,029)数学的還元にテキストコンテンツです。チェックサムは完全にユニークではありませんが、ファイルのチェックサムの異なる内容が、同じ最小限の確率ながら。

$ 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
复制代码

あなたは、あなたのシステムにインストールする必要があるかもしれませんfslintまた、あなたのコマンド検索パスに追加する必要があるかもしれません。

$ export PATH=$PATH:/usr/share/fslint/fslint
复制代码

rdfindコマンドを使用します。

rdfindコマンドは、重複(同じ内容)のファイルを探します。その名は「繰り返し検索」を意味し、それが元であるファイルを決定するためにファイルの日付に基づいてすることができます - あなたがコピーを削除することを選択したとき、それは新しいファイルを削除するので、これは便利です。

$ 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.    <==
复制代码

あなたはおそらくあなたのシステムにインストールする必要があります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システムは、位置決めを提供し、(潜在的に)良いツールの一連の重複したファイルを削除し、あなたが検索領域を指定することができますし、あなたが発見したときに重複したファイルを処理するためのときのオプションすることができます。


経由:www.networkworld.com/article/339...

著者:サンドラヘンリー・ストッカーのトピック:lujun9972の翻訳:tomjlw校正:WXY

この記事LCTTオリジナルのコンパイラは、Linuxの中国は誇りに思っています

ます。https://juejin.im/post/5cfe74985188254ee433c032で再現

おすすめ

転載: blog.csdn.net/weixin_34101784/article/details/93183697