すべての重複ファイルをハードリンクに置き換える方法


20

さまざまなファイルを含む2つのフォルダーがあります。最初のフォルダーの一部のファイルには、2番目のフォルダーに正確なコピーがあります。それらをハードリンクに置き換えたいと思います。どうやってやるの?


2
OSとファイルシステムを提供してください。
スティーブン

まあ、ubuntu 15.04でext4を使用しますが、誰かが別のOSに答えを提供してくれれば、この質問を読んでいる人に役立つと確信しています。
qdii

回答:


20

Linux用の4つのコマンドラインソリューションを知っています。私が好むのは、rdfind利用可能なすべてのオプションがあるため、ここにリストされている最後のものです。

fdupes

  • これは、最も推奨される/最もよく知られているもののようです。
  • 最も簡単に使用できますが、その唯一のアクションは重複を削除することです。
  • 重複が実際に重複していることを確認するために(実行に永遠に時間がかかることはありません)、ファイル間の比較は最初にファイルサイズで行われ、次にmd5ハッシュ、次にバイト単位の比較が行われます。

サンプル出力(オプション「サイズの表示」、「再帰的」):

$ fdupes -Sr .
17 bytes each:                          
./Dir1/Some File
./Dir2/SomeFile

ハードリンク

  • 名前が示すように、見つかったファイルをハードリンクで置き換えるように設計されています。
  • --dry-runオプションがあります。
  • 内容の比較方法は示しませんが、他のすべてのオプションとは異なり、ファイルモード、所有者、および変更時刻を考慮します。

サンプル出力(2つのファイルの変更時刻がわずかに異なることに注意してください。2回目の実行では、それを無視するように指示しています):

$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500

$ hardlink --dry-run -v .
Mode:     dry-run
Files:    5
Linked:   0 files
Compared: 0 files
Saved:    0 bytes
Duration: 0.00 seconds

$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode:     dry-run
Files:    5
Linked:   1 files
Compared: 1 files
Saved:    17 bytes
Duration: 0.00 seconds

ダフ

  • ユーザーが操作するファイルを見つけるために作成。利用可能なアクションはありません。
  • 比較はファイルサイズ、次にsha1ハッシュによって行われます。
    • ハッシュは、sha256、sha384、またはsha512に変更できます。
    • ハッシュを無効にしてバイト単位の比較を行うことができます

サンプル出力(オプション「再帰」を使用):

$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File

rdfind

  • オプションには通常とは異なる構文があります(模倣する必要がありfindますか?)。
  • 重複ファイルに対して実行するアクションのいくつかのオプション(削除、シンボリックリンクの作成、ハードリンクの作成)。
  • ドライランモードがあります。
  • 比較は、ファイルサイズ、最初のバイト、最後のバイト、md​​5(デフォルト)またはsha1の順に行われます。
  • 見つかったファイルのランキングにより、どのファイルがオリジナルと見なされるかを予測できます。

サンプル出力:

$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 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 md5 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, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.

$ cat results.txt 
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file

1
「その後、md5(デフォルト)またはsha1のいずれか。」 それはファイルが同一であることを意味しません。 ハッシュを計算するには、プログラムがファイル全体を読み取る必要があるため、ファイル全体をバイト単位で比較する必要があります。CPU時間も節約できます。
エンドリス

あなたはいつも何が起こるかを見るために、ドライランで始まる理由は...だ@endolith
Izkata

ただし、ソフトウェアのポイントは、重複ファイルを識別することです。ファイルが実際に重複していることを手動で再確認する必要がある場合、それは役に立ちません。
エンドリス


2
お持ちの場合はn個の同一サイズ、最初のバイト、とのファイルおよびエンド・バイトを、彼らは直接比較することによって必要とすることに決定し、すべてのそれ以外のさまざまだn個を!ペア比較。それらをすべてハッシュしてからハッシュを比較すると、特に大きなファイルや多数のファイルの場合、はるかに高速になる可能性があります。そのフィルターをパスしたものはすべて、直接比較を行って検証することができます。(または単により良いハッシュを使用して開始します。)
アランデスメット

6

Duplicate Commanderは、Windowsで可能なソリューションです。

Duplicate Commanderは、PC上の重複ファイルを見つけて管理できるフリーウェアアプリケーションです。Duplicate Commanderには、これらの重複からディスク領域を回復できる多くの機能とツールが付属しています。

特徴:

Replacing files with hard links
Replacing files with soft links
... (and many more) ...

1

Linuxの場合、ここで Bashスクリプトを見つけることができます。


2

Duplicate&Same File Searcherは、Windows上のもう1つのソリューションです。

重複&同じファイルサーチャー(重複サーチャー)は、重複ファイル(クローン)と同じファイルへのNTFSハードリンクを検索するためのアプリケーションです。ファイル名に関係なく、重複するファイルの内容を検索します(バイト単位の正確な比較が使用されます)。このアプリケーションでは、重複ファイルを削除したり、別の場所に移動したりするだけでなく、重複をNTFSハードリンクで置き換えることもできます(一意です!)

ここに画像の説明を入力してください


1

私のコンピューターにはLink Shell Extensionと呼ばれる気の利いた無料ツールがありました。ハードリンクとシンボリックリンクを作成するのに最適なだけでなく、ジャンクションも作成しました。さらに、カスタムアイコンを追加して、インストール前にすでに存在していたものであっても、さまざまなタイプのリンクを簡単に識別できるようにしました。たとえば、赤い矢印はハードリンクを表し、緑の矢印はシンボリックリンクを表し、チェーンはジャンクションを表します。

さまざまなプログラムの大量アンインストール中に、残念ながらソフトウェアをアンインストールしたため、これ以上手動でリンクを作成することはできませんが、Windowsがハードリンク、シンボリックリンク、またはジャンクションリンクを検出すると常にアイコンが自動的に表示されます。


1

jdupesを強くお勧めします。これはfdupesの拡張フォークですが、次のものも含まれています。

  • 一連の新しいコマンドラインオプション—を含む--linkhard、または-L略して
  • すべての主要なOSプラットフォームのネイティブサポート
  • 平均でfdupesよりも7倍以上速いと言われている速度

質問については、単に実行でき$ jdupes -L /path/to/your/filesます。

プロジェクトはまだ活発に開発中であるため、GitHubリポジトリから最新のソースを複製してビルドすることをお勧めします。 Windowsバイナリもここで提供されます。パッケージ化されたバイナリは、いくつかのLinux / BSDディストリビューションで利用可能です-実際、私は最初にそれを見つけました$ apt search

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.