サイトロゴ

fdupes で内容が重複しているファイルを見つける|シェル

著者画像
Toshihiko Arai

はじめに

fdupes は、ファイルシステム上で重複するファイルを探すためのコマンドラインツールです。ファイル名ではなく、ファイルの内容をハッシュで比較して重複判断を行います。さらには、以下のような機能も備わっています。

  • 内容ベースの比較: fdupesはファイル名やタイムスタンプではなく、ファイルの内容を比較して重複を検出します。
  • 再帰的検索: サブディレクトリも含めたディレクトリ内のファイルを再帰的に検索できます。
  • 削除オプション: 重複するファイルの削除を支援するオプションがあります。

この記事では、fdupesの基本的な使い方と、これらの機能を使った便利な事例をご紹介いたします。

brewでfdupesをインストールする

まずはbrewでfdupesをmacOSへインストールします。

brew install fdupes

fdupes基本的な使い方

1. 重複ファイルの検索:

指定したディレクトリ内の重複ファイルを探すには、単にfdupes [ディレクトリパス]を実行します。

fdupes /path/to/directory

2. 再帰的検索:

サブディレクトリを含めて重複を検索するには、-rオプションを使用します。

fdupes -r /path/to/directory

3. 重複ファイルの削除:

-dオプションを使うと、重複ファイルの一覧が表示され、どのファイルを保持するかを選択できます。

fdupes -d /path/to/directory

4. プロンプトなしで重複ファイルを削除:

-Nオプションを追加すると、プロンプトなしで重複ファイルを自動的に削除します。

fdupes -dN /path/to/directory

fdupesは非常に便利ですが、重要なファイルを操作する場合は注意が必要です。特に、自動削除オプション(-dN)を使用する場合は、重要なデータのバックアップを取ることを強くお勧めします。


カレントディレクトリの中にあるファイルを再起的に重複かどうか判別し削除するシェルスクリプト

このスクリプトは、現在のディレクトリおよびその下のすべてのサブディレクトリで重複するファイルを検索します:

このスクリプトを実行すると、現在のディレクトリおよびそのすべてのサブディレクトリで重複ファイルを検索し、見つかった重複ファイルをプロンプトで確認した後で削除します。画像の重複を発見するために作成しましたが、画像以外のファイルの重複も検知するため実行する場合には十分気をつけてください。

#!/bin/bash

TARGET_DIRECTORY=$(pwd)

echo "重複している画像を検索しています..."
duplicates=$(fdupes -r $TARGET_DIRECTORY)

if [ -z "$duplicates" ]; then
    echo "重複する画像は見つかりませんでした。"
    exit 0
fi

echo "以下のファイルが重複しています:"
echo "$duplicates"

read -p "これらの重複するファイルの一方を削除しますか? [y/N] " response

if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]
then
    # 重複ファイルの削除
    echo "重複するファイルを削除しています..."
    fdupes -rdN $TARGET_DIRECTORY
    echo "重複するファイルが削除されました。"
else
    echo "操作がキャンセルされました。"
fi

関連記事