如何用硬連結替換所有重複的檔案?

如何用硬連結替換所有重複的檔案?

我有兩個包含各種文件的資料夾。第一個資料夾中的某些檔案在第二個資料夾中具有精確的副本。我想用硬鏈接替換它們。我怎樣才能做到這一點?

答案1

我知道 4 個 Linux 命令列解決方案。我最喜歡的是這裡列出的最後一個,rdfind因為有所有可用的選項。

複製品

  • 這似乎是最推薦/最知名的一個。
  • 它使用起來最簡單,但它唯一的作用就是刪除重複項。
  • 為了確保重複項確實是重複項(同時不會永遠運行),檔案之間的比較首先按檔案大小進行,然後進行 md5 哈希,然後逐位元組比較。

範例輸出(附選項「顯示大小」、「遞歸」):

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

硬連結

  • 顧名思義,其設計目的是用硬連結替換找到的檔案。
  • 有一個--dry-run選擇。
  • 不指示如何比較內容,但與所有其他選項不同,它會考慮文件模式、所有者和修改時間。

範例輸出(請注意我的兩個檔案的修改時間略有不同,因此在第二次運行中我告訴它忽略這一點):

$ 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

尋找

  • 選項具有不尋常的語法(旨在模仿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簡而言之
  • 對所有主要作業系統平台的本機支持
  • 據稱速度平均比 fdupes 快 7 倍以上

對於你的問題,你可以執行$ jdupes -L /path/to/your/files

您可能想從其克隆並建立最新的源代碼GitHub 倉庫由於該項目仍在積極開發中。 Windows 二進位檔案這裡也提供了。一些 Linux/BSD 發行版中提供了打包的二進位檔案——實際上我是透過$ apt search.

答案3

重複指揮官Windows 上的一個可能的解決方案是:

Duplicate Commander 是一款免費軟體應用程序,可讓您找到和管理 PC 上的重複檔案。 Duplicate Commander 隨附許多功能和工具,可讓您從這些重複項中還原磁碟空間。

特徵:

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

1

對於 Linux,您可以找到 Bash 腳本這裡

答案4

我的電腦上有一個很棒的免費工具,稱為 Link Shell Extension;它不僅非常適合創建硬鏈接和符號鏈接,而且還非常適合創建連接!此外,它還添加了自訂圖標,使您可以輕鬆識別不同類型的鏈接,甚至是安裝前已經存在的鏈接;例如,紅色箭頭代表硬鏈接,而綠色代表符號鏈接......鏈代表連接點。

不幸的是,我不久前卸載了該軟體(在大量卸載各種程式中),因此我無法再手動創建鏈接,但每當Windows 檢測到硬鏈接、符號鏈接或連接鏈接時,圖標仍然會自動顯示。

相關內容