さまざまなファイルを含む 2 つのフォルダーがあります。最初のフォルダーのファイルの一部は、2 番目のフォルダーにまったく同じコピーがあります。それらをハード リンクに置き換えたいのですが、どうすればよいですか?
答え1
私は Linux 用のコマンドライン ソリューションを 4 つ知っています。私が好むのは、rdfind
利用可能なオプションがすべて揃っているため、ここにリストされている最後の です。
重複
- これは最も推奨されている/最もよく知られているもののようです。
- 使い方は最も簡単ですが、重複を削除することだけが唯一のアクションです。
- 重複が実際に重複であることを確認するために (実行に時間がかかりすぎないように)、ファイル間の比較は、最初にファイル サイズで実行され、次に 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
見つける
- オプションには珍しい構文があります (
find
? を模倣することを目的としています)。 - 重複ファイルに対して実行するアクションのいくつかのオプション (削除、シンボリックリンクの作成、ハードリンクの作成)。
- ドライランモードを搭載。
- 比較は、ファイル サイズ、最初のバイト、最後のバイト、md5 (デフォルト) または 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
答え2
強くお勧めしますジューペスの強化フォークです重複、また以下も含まれます:
- 多数の新しいコマンドラインオプション(以下を含む)
--linkhard
、 または-L
略して - すべての主要OSプラットフォームのネイティブサポート
- 平均してfdupesの7倍以上の速度と言われている
質問については、次のように実行してください$ jdupes -L /path/to/your/files
。
最新のソースをクローンしてビルドしたい場合があります。GitHub リポジトリプロジェクトはまだ活発に開発中であるため。
Windows バイナリもここで提供されています。パッケージ化されたバイナリは、一部の Linux / BSD ディストリビューションで利用可能です。実際、私は を通じて初めてそれを見つけました$ apt search
。
答え3
答え4
私のコンピューターには、Link Shell Extension という便利な無料ツールがありました。これは、ハード リンクやシンボリック リンクだけでなく、ジャンクションの作成にも最適です。さらに、インストール前にすでに存在していたリンクも含め、さまざまな種類のリンクを簡単に識別できるカスタム アイコンが追加されました。たとえば、赤い矢印はハード リンクを表し、緑はシンボリック リンクを表し、チェーンはジャンクションを表します。
残念ながら、しばらく前にソフトウェアをアンインストールしました (さまざまなプログラムを一括アンインストールしたため)。そのため、手動でリンクを作成することはできませんが、Windows がハード リンク、シンボリック リンク、またはジャンクション リンクを検出すると、アイコンは引き続き自動的に表示されます。