プログラミング
DskDitto: 超高速・並列重複ファイル検出ツール
DskDitto: Ultra-fast, parallel duplicate-file detector (github.com)
要約
DskDittoは、インタラクティブなメニューを備えた超高速・並列重複ファイル検出ツールです。大規模ディスク上の重複ファイルを瞬時に検出し、ターミナルインターフェースまたは実験的なGUIで簡単に管理できます。安全な削除やシンボリックリンクへの変換機能も提供し、ディスク容量の最適化を支援します。
全文翻訳
dskDitto
dskDitto
インタラクティブなメニューを備えた超高速・並列重複ファイル検出ツールで、不要な重複ファイルを手間なく削除できます!
特徴
驚異的な速度での重複スキャン — 並列処理により、大容量ディスク上の重複ファイルを瞬時に検出します。
デフォルトでインタラクティブなTUI — Bubble Tea搭載の直感的なターミナルインターフェースで、重複ファイルを閲覧、比較、管理できます。
オプションのGUI — 実験的なRaylib GUIを使用すれば、TUIの代わりにグラフィカルな代替手段を利用できます。
安全な削除とシンボリックリンクへの変換 — 確認ダイアログにより事故を防ぎながら、重複ファイルを削除したり、シンボリックリンクに置き換えたりできます。
スマートな単一ファイル検索 — 特定のファイルをハッシュ化し、ファイルシステム全体でその重複ファイルを瞬時に見つけます。
柔軟なハッシュ — コンテンツ検証のためにSHA-256(デフォルト)またはBLAKE3を選択できます。
詳細なフィルタリング — サイズ、深度、隠しファイル、シンボリックリンク、仮想ファイルシステム、ファイルシステム境界によってファイルをスキップします。
結果のエクスポート — レポート作成や自動化のために、CSV、JSON、またはプレーンテキストで結果を保存します。
Unixハードリンク対応 — ハードリンクされたファイルをインテリジェントに扱い、誤った重複を回避します。
インストール
Go 1.22以降を使用してソースから直接インストールします:
go install github.com/jdefrancesco/dskDitto/cmd/dskDitto@latest
これにより、CLI/TUIバイナリが$(go env GOPATH)/bin/dskDitto(デフォルトでは~/go/bin)に配置されます。
デフォルトのインストールでは、オプションのRaylib GUIはビルドされません。
GUI対応バイナリをインストールするには、RaylibとCGoが利用可能であることを確認し、guiタグでビルドしてください:
go install -tags gui github.com/jdefrancesco/dskDitto/cmd/dskDitto@latest
使用方法
dskDitto [オプション] PATH ...
一般的なフラグ:
フラグ 説明
--version 現在のバージョンを表示して終了
--no-banner 起動時のバナーをスキップ
--gui デフォルトのTUIの代わりに、実験的なRaylib GUIで結果を確認します。GUIビルドが必要です
--profile <file> CPUプロファイルを指定されたファイルに書き出します
--time-only スキャン完了後すぐに終了し、経過時間のみを表示します
--min-size <bytes> 指定されたサイズより小さいファイルを無視します
--max-size <bytes> 指定されたサイズより大きいファイルをスキップします(デフォルトは4 GiB。制限なしの場合は0を使用)
--all-sizes あらゆるサイズのファイルをスキャンします。--max-size 0のより明確な同義語です
--hidden ドットファイルとドットディレクトリを含めます
--exclude <path> スキャンからパスを除外します(繰り返し可能。子孫も除外します)
--no-symlinks シンボリックリンクをスキップします
--empty ゼロバイトファイルをインクルードします
--include-vfs /procや/devのような仮想ファイルシステムディレクトリを含めます
--one-file-system 異なるファイルシステムデバイス上のディレクトリに下降しません。--xdev は短いエイリアスです
--dir-concurrency <int> 並列ディレクトリ読み取りを制限します。値が0以下の場合は自動調整を使用します
--no-cache サポートされているプラットフォームでは、OSにファイルシステムキャッシュをハッシュ化中にポピュレートしないように要求します
--current 指定されたパスのみにスキャンを制限します(再帰なし)
--depth <levels> 開始パスの下の<levels>ディレクトリに再帰を制限します
--dups <count> 指定された数のファイルを含むグループのみを表示します
--text, --bullet TUIを起動せずに重複をレンダリングします
--remove <keep> 重複を操作し、グループごとに最初の<keep>エントリを保持します
--link --remove と一緒に、余分な重複を削除する代わりにシンボリックリンクに変換します
--file <path> 指定されたファイルの重複のみを報告します。--name-only と一緒に、そのファイルの正確な名前で一致させます
--name-only シャローモード:コンテンツとサイズを無視して、正確なファイル名でファイルをグループ化します
--file-shallow <path> シャローモード:指定されたパスと全く同じ名前のファイルのみを報告します
--fuzzy コンテンツベースのニアデュプリケートモード(ファイル名ではなく、ファイル類似性)
--fuzzy-threshold <pct> ファジーモードでの最小類似性パーセンテージ(デフォルトは75)
--fuzzy-same-ext ファジーモードでは、同じ拡張子を持つファイルのみを比較します
--hash <algo> ハッシュアルゴリズムを選択します: sha256(デフォルト)または blake3
--csv-out <file> 重複グループをCSVに書き出します
--json-out <file> 重複グループをJSONに書き出します
--fs-detect <path> <path>を含むファイルシステムの種類を表示します
--color-safe カスタムカラーを避ける高互換性TUIテーマを使用します(問題のあるターミナルテーマに最適)
--no-confirm TUI/GUIでの削除およびリンク操作のインタラクティブな確認コードをスキップします
スキャンを中断するには、いつでもCtrl+Cを押してください。
重複がTUIまたはGUIで削除または変換される際、--no-confirmが設定されていない限り、確認ダイアログが意図しない大量変更を防ぎます。
重複削除とシンボリックリンクへの変換
dskDittoは、--removeで明示的に要求されない限り、何も削除したり上書きしたりしません。
ドライ/インタラクティブモード: デフォルト(または--text / --bullet)では、ツールは重複のみを報告します。
余分なファイルを削除: --remove <keep> を使用して、各重複グループの<keep>ファイル以外のすべてを削除します。
余分なファイルをシンボリックリンクに変換: --remove <keep> --link を組み合わせると、グループごとに1つの保持ファイルにポイントするシンボリックリンクで余分な重複を置き換えます。
TUIでは、現在マークされているファイルをシンボリックリンクに変換することもできます。置き換えたい重複をマークし、Lキーを押して確認コードを入力します。各グループのシンボリックリンクは、そのグループ内のマークされていない1つのファイルを参照します。
パワーユーザーは--no-confirmを渡して、TUIおよびGUIでの確認コードをスキップできます。
Unixライクなシステムでは、同じ基盤ファイルへの複数のハードリンクはスキャン中に単一のエントリとして扱われます。dskDittoはコンテンツを一度だけハッシュ化し、それらのハードリンクパスを別々のスペースを無駄にする重複として報告しません。
--link を使用する場合、操作後のオンディスクレイアウトは、3つの同一ファイルのグループと--remove 1 --link の場合、次のようになります:
/path/to/keep/file.txt # 元のファイルが保持される
/path/to/dup/file-copy.txt -> /path/to/keep/file.txt (シンボリックリンク)
/another/location/file.txt -> /path/to/keep/file.txt (シンボリックリンク)
TUIでは、シンボリックリンクであるファイルは[symlink]サフィックスで注釈付けされるため、どのエントリが変換されたかを確認できます。
単一ファイル重複検索
--file /path/to/original.ext を使用して特定のファイルを最初にハッシュ化し、次に指定されたディレクトリをスキャンして、同一コンテンツを持つ他のファイルを探します。これらのディレクトリで重複が見つからない場合、dskDittoは正常に終了します。それ以外の場合、すべてのレポート/削除/エクスポートモードは、その単一の重複グループ(元のファイルが最初にリストされる)に制限されます。
シャローファイル名重複検索
--name-only を使用すると、ファイルコンテンツをハッシュ化せずに、正確な最終ファイル名でファイルをグループ化します。例えば、dir1/text1 と dir2/text1 は、コンテンツが異なっていても重複と見なされます。
--name-only --file /path/to/text1、または --file-shallow /path/to/text1 を組み合わせて、シャロー結果を1つの正確なファイル名に制限します。
シャローターゲットがドットファイルの場合、dskDittoはそのスキャンで自動的に隠しファイルとディレクトリを含めます。
バックアップはシャローファイル名マッチングではサポートされていません。なぜなら、同じ名前のファイルは異なるデータを含む可能性があるからです。
--backup が --name-only または --file-shallow と組み合わされる場合、dskDittoは警告を表示し、スキャンまたはファイルの変更前に終了します。
ファジーコンテンツマッチング(ニアデュプリケート)
--fuzzy を使用して、バイト単位で同一でなくても、類似したコンテンツを持つファイルを見つけます。このモードはファイルコンテンツのシグネチャのみを比較し、ファイル名の一致性は使用しません。
デフォルトでは、ファジーモードは75%以上の類似性を持つグループを返します:
dskDitto --fuzzy ~/Downloads
必要に応じて類似性カットオフを調整します:
dskDitto --fuzzy --fuzzy-threshold 90 ~/Downloads
同じ拡張子を持つファイルのみにファジー比較を制限します:
dskDitto --fuzzy --fuzzy-same-ext ~/Downloads
--fuzzy の結果はレビューのみのニアマッチです。自動変更フロー(--remove / --link)はファジーモードでは無効になっています。
ハッシュアルゴリズム
デフォルトでは、dskDittoはコンテンツハッシュにSHA-256を使用します:
SHA-256 (--hash sha256): 衝突保証が強く、広くサポートされている保守的な選択肢です。
BLAKE3 (--hash blake3): 多くの状況で、最新のCPUでは大幅に高速です。しかし、macOSではSHA256が微調整されており、ほとんどの場合BLAKE3よりもパフォーマンスが優れています。したがって、現時点ではSHA-256をデフォルトとしています。
例
ホームディレクトリをスキャンし、重複をインタラクティブにレビューします:
dskDitto $HOME
実験的なRaylibウィンドウUIを使用します:
dskDitto --gui $HOME
デフォルトのインストールはCLI/TUIのみです。もし