fdupes-Linuxで重複ファイルを検索して削除するためのコマンドラインツール


ほとんどのコンピューターユーザーにとって、重複ファイルを見つけて置き換えることは一般的な要件です。重複ファイルの検索と削除は、時間と忍耐を必要とする面倒な作業です。マシンがGNU/Linuxを搭載している場合、「fdupes」ユーティリティのおかげで、重複ファイルを見つけるのは非常に簡単です。

Fdupesは、MITライセンスの下でリリースされたCプログラミング言語でAdrianLopezによって作成されたLinuxユーティリティです。アプリケーションは、指定されたディレクトリとサブディレクトリのセットで重複ファイルを見つけることができます。 Fdupesは、ファイルのMD5署名を比較した後、バイトごとに比較することにより、重複を認識します。 Fdupesを使用して多くのオプションを渡して、ファイルを一覧表示、削除、および重複するハードリンクに置き換えることができます。

比較は次の順序で始まります。

サイズ比較>部分的なMD5署名の比較>完全なMD5署名の比較>バイト間の比較。

Linuxにfdupesをインストールする

UbuntuやLinuxMintなどのDebianベースのシステムで次のコマンドを実行するのと同じくらい簡単に最新バージョンのfdupes(fdupesバージョン1.51)をインストールできます。

$ sudo apt-get install fdupes

CentOS/RHELおよびFedoraベースのシステムでは、fdupesパッケージをインストールするにはepelリポジトリをオンにする必要があります。

# yum install fdupes
# dnf install fdupes    [On Fedora 22 onwards]

注:デフォルトのパッケージマネージャーyumは、Fedora22以降のdnfに置き換えられています…

fdupesコマンドの使用方法は?

1.デモンストレーションの目的で、ディレクトリ(たとえばtecmint)の下に次のようにいくつかの重複ファイルを作成しましょう。

$ mkdir /home/"$USER"/Desktop/tecmint && cd /home/"$USER"/Desktop/tecmint && for i in {1..15}; do echo "I Love Tecmint. Tecmint is a very nice community of Linux Users." > tecmint${i}.txt ; done

上記のコマンドを実行した後、lsコマンドを使用して重複ファイルが作成されているかどうかを確認しましょう。

$ ls -l

total 60
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint10.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint11.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint12.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint13.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint14.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint15.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint1.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint2.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint3.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint4.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint5.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint6.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint7.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint8.txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

上記のスクリプトは、15個のファイル(tecmint1.txt、tecmint2.txt…tecmint15.txt)を作成し、すべてのファイルに同じデータが含まれています。

"I Love Tecmint. Tecmint is a very nice community of Linux Users."

2.ここで、tecmintフォルダー内の重複ファイルを検索します。

$ fdupes /home/$USER/Desktop/tecmint 

/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

3. -rオプションを使用して、サブディレクトリを含むすべてのディレクトリで重複を再帰的に検索します。

重複をスキャンするのに時間がかかるファイルとフォルダーの数に応じて、すべてのファイルとフォルダーを再帰的に検索します。その間に、ターミナルの全体的な進捗状況が次のように表示されます。

$ fdupes -r /home

Progress [37780/54747] 69%

4. -Sオプションを使用して、フォルダー内で見つかった重複のサイズを確認します。

$ fdupes -S /home/$USER/Desktop/tecmint

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

5. -Sオプションと-rオプションを同時に使用すると、次のように、遭遇したすべてのディレクトリとサブディレクトリの重複ファイルのサイズを確認できます。

$ fdupes -Sr /home/avi/Desktop/

65 bytes each:                          
/home/tecmint/Desktop/tecmint/tecmint13.txt
/home/tecmint/Desktop/tecmint/tecmint8.txt
/home/tecmint/Desktop/tecmint/tecmint11.txt
/home/tecmint/Desktop/tecmint/tecmint3.txt
/home/tecmint/Desktop/tecmint/tecmint4.txt
/home/tecmint/Desktop/tecmint/tecmint6.txt
/home/tecmint/Desktop/tecmint/tecmint7.txt
/home/tecmint/Desktop/tecmint/tecmint9.txt
/home/tecmint/Desktop/tecmint/tecmint10.txt
/home/tecmint/Desktop/tecmint/tecmint2.txt
/home/tecmint/Desktop/tecmint/tecmint5.txt
/home/tecmint/Desktop/tecmint/tecmint14.txt
/home/tecmint/Desktop/tecmint/tecmint1.txt
/home/tecmint/Desktop/tecmint/tecmint15.txt
/home/tecmint/Desktop/tecmint/tecmint12.txt

107 bytes each:
/home/tecmint/Desktop/resume_files/r-csc.html
/home/tecmint/Desktop/resume_files/fc.html

6. 1つのフォルダーまたはすべてのフォルダーを再帰的に検索する以外に、必要に応じて2つのフォルダーまたは3つのフォルダーを選択できます。言うまでもなく、必要に応じてオプション-Sおよび/または-rを使用できます。

$ fdupes /home/avi/Desktop/ /home/avi/Templates/

7.コピーを保持しながら重複ファイルを削除するには、オプション「-d」を使用できます。このオプションを使用するときは特に注意する必要があります。そうしないと、必要なファイル/データが失われ、プロセスが回復不能になる可能性があります。

$ fdupes -d /home/$USER/Desktop/tecmint

[1] /home/tecmint/Desktop/tecmint/tecmint13.txt
[2] /home/tecmint/Desktop/tecmint/tecmint8.txt
[3] /home/tecmint/Desktop/tecmint/tecmint11.txt
[4] /home/tecmint/Desktop/tecmint/tecmint3.txt
[5] /home/tecmint/Desktop/tecmint/tecmint4.txt
[6] /home/tecmint/Desktop/tecmint/tecmint6.txt
[7] /home/tecmint/Desktop/tecmint/tecmint7.txt
[8] /home/tecmint/Desktop/tecmint/tecmint9.txt
[9] /home/tecmint/Desktop/tecmint/tecmint10.txt
[10] /home/tecmint/Desktop/tecmint/tecmint2.txt
[11] /home/tecmint/Desktop/tecmint/tecmint5.txt
[12] /home/tecmint/Desktop/tecmint/tecmint14.txt
[13] /home/tecmint/Desktop/tecmint/tecmint1.txt
[14] /home/tecmint/Desktop/tecmint/tecmint15.txt
[15] /home/tecmint/Desktop/tecmint/tecmint12.txt

Set 1 of 1, preserve files [1 - 15, all]: 

すべての重複が一覧表示され、1つずつ、特定の範囲、またはすべてを一度に削除するように求められる場合があります。以下のような範囲を選択して、特定の範囲のファイルを削除することができます。

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

   [-] /home/tecmint/Desktop/tecmint/tecmint13.txt
   [+] /home/tecmint/Desktop/tecmint/tecmint8.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint11.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint3.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint4.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint6.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint7.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint9.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint10.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint2.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint5.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint14.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint1.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint15.txt
   [-] /home/tecmint/Desktop/tecmint/tecmint12.txt

8.安全性の観点から、「fdupes」の出力をファイルに出力してから、テキストファイルをチェックして、削除するファイルを決定することをお勧めします。これにより、ファイルが誤って削除される可能性が低くなります。あなたはすることができます:

$ fdupes -Sr /home > /home/fdupes.txt

注:「/ home」を目的のフォルダに置き換えることができます。また、再帰的に検索する場合はオプション「-r」を使用し、印刷サイズを使用する場合は「-S」を使用します。

9.オプション「-f」を使用して、一致の各セットから最初のファイルを省略できます。

ディレクトリの最初のリストファイル。

$ ls -l /home/$USER/Desktop/tecmint

total 20
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (3rd copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (4th copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (another copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9 (copy).txt
-rw-r--r-- 1 tecmint tecmint 65 Aug  8 11:22 tecmint9.txt

次に、一致する各セットから最初のファイルを省略します。

$ fdupes -f /home/$USER/Desktop/tecmint

/home/tecmint/Desktop/tecmint9 (copy).txt
/home/tecmint/Desktop/tecmint9 (3rd copy).txt
/home/tecmint/Desktop/tecmint9 (another copy).txt
/home/tecmint/Desktop/tecmint9 (4th copy).txt

10.インストールされているfdupesのバージョンを確認します。

$ fdupes --version

fdupes 1.51

11. fdupesについてサポートが必要な場合は、スイッチ「-h」を使用できます。

$ fdupes -h

Usage: fdupes [options] DIRECTORY...

 -r --recurse     	for every directory given follow subdirectories
                  	encountered within
 -R --recurse:    	for each directory given after this option follow
                  	subdirectories encountered within (note the ':' at
                  	the end of the option, manpage for more details)
 -s --symlinks    	follow symlinks
 -H --hardlinks   	normally, when two or more files point to the same
                  	disk area they are treated as non-duplicates; this
                  	option will change this behavior
 -n --noempty     	exclude zero-length files from consideration
 -A --nohidden    	exclude hidden files from consideration
 -f --omitfirst   	omit the first file in each set of matches
 -1 --sameline    	list each set of matches on a single line
 -S --size        	show size of duplicate files
 -m --summarize   	summarize dupe information
 -q --quiet       	hide progress indicator
 -d --delete      	prompt user for files to preserve and delete all
                  	others; important: under particular circumstances,
                  	data may be lost when using this option together
                  	with -s or --symlinks, or when specifying a
                  	particular directory more than once; refer to the
                  	fdupes documentation for additional information
 -N --noprompt    	together with --delete, preserve the first file in
                  	each set of duplicates and delete the rest without
                  	prompting the user
 -v --version     	display fdupes version
 -h --help        	display this help message

これですべてです。 Linuxでこれまで重複ファイルを見つけて削除していた方法を教えてください。また、このユーティリティについてのあなたの意見を教えてください。貴重なフィードバックを下のコメントセクションに入れてください。私たちを高く評価/共有し、私たちが広まるのを助けることを忘れないでください。

私は重複ファイルを削除するためにfslintと呼ばれる別のユーティリティに取り組んでいます。まもなく投稿され、皆さんは読むのが大好きになります。