web-dev-qa-db-ja.com

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

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

21
qdii

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

fdupes

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

出力例( "show size"、 "recursive"オプションを使用):

$ 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に変更できます。
    • ハッシュを無効にして、バイトごとの比較を行うことができます

出力例( "recursive"オプションを使用):

$ 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
21
Izkata

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

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

enter image description here

2
Greck

jdupes をお勧めします。 fdupes の拡張フォークですが、以下も含まれます。

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

あなたの質問については、$ jdupes -L /path/to/your/filesを実行するだけです。

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

1
Arnie97

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

残念なことに、しばらく前にソフトウェアをアンインストールしました(さまざまなプログラムの一括アンインストールで)。これで手動でリンクを作成できなくなりましたが、Windowsがハードリンク、シンボリックリンク、またはジャンクションリンクを検出するたびにアイコンが自動的に表示されます。

1
Amaroq Starwind