我有兩個包含各種文件的資料夾。第一個資料夾中的某些檔案在第二個資料夾中具有精確的副本。我想用硬鏈接替換它們。我怎樣才能做到這一點?
答案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
答案4
我的電腦上有一個很棒的免費工具,稱為 Link Shell Extension;它不僅非常適合創建硬鏈接和符號鏈接,而且還非常適合創建連接!此外,它還添加了自訂圖標,使您可以輕鬆識別不同類型的鏈接,甚至是安裝前已經存在的鏈接;例如,紅色箭頭代表硬鏈接,而綠色代表符號鏈接......鏈代表連接點。
不幸的是,我不久前卸載了該軟體(在大量卸載各種程式中),因此我無法再手動創建鏈接,但每當Windows 檢測到硬鏈接、符號鏈接或連接鏈接時,圖標仍然會自動顯示。