この記事ではLinux上でディレクトリ内の重複ファイルを検索する手法について詳しく解説します。重複ファイルを効率よく見つけ出すためのコード例、その詳細な解説、さらには応用例まで網羅しています。
なぜ重複ファイルを検索するのか
重複ファイルはストレージの無駄であり、また管理上も非効率です。特に大規模なファイルシステムやクラウドストレージを使用している場合、これらの重複はコストとなります。
基本的な重複ファイル検索コマンド
まずは基本的なコマンドから始めましょう。以下のシェルスクリプトは、指定されたディレクトリ内の重複ファイルを検索します。
#!/bin/bash
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD
このコマンドでは、`find`コマンドでファイルを検索し、それぞれのファイルに対して`md5sum`コマンドを実行しています。次に`sort`コマンドで並び替え、最後に`uniq`コマンドで重複を見つけ出します。
コマンドの詳細
– `find . -type f -exec md5sum {} +`: 現在のディレクトリ(`.`)からファイル(`-type f`)を検索して、それぞれに`md5sum`を実行します。
– `sort`: ハッシュをソートします。
– `uniq -w32 -dD`: 最初の32文字(MD5ハッシュ)が同じ行(重複ファイル)を表示します。
応用例
1. 特定の拡張子だけを対象とする
find . -name "*.txt" -type f -exec md5sum {} + | sort | uniq -w32 -dD
このコードは`.txt`ファイルのみを対象としています。
2. 重複ファイルを削除する
find . -type f -exec md5sum {} + | sort | uniq -w32 -d --all-repeated=separate | awk '{ print $2 }' | xargs rm -f
このコードは、重複ファイルを自動で削除します。
3. サブディレクトリを無視する
find . -maxdepth 1 -type f -exec md5sum {} + | sort | uniq -w32 -dD
このコードは、サブディレクトリ内のファイルは無視して、カレントディレクトリ内のファイルだけを対象とします。
4. レポートを生成する
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD > duplicate_report.txt
このコードは、重複ファイルのリストを`duplicate_report.txt`に保存します。
まとめ
Linuxでディレクトリ内の重複ファイルを効率よく検索する方法について解説しました。基本的なコマンドから応用例まで、多角的にこの問題にアプローチする方法を提供しました。
コメント