我的備份遇到了問題,現在我的硬碟上有很多資料夾。我有一個主要的“文件夾樹”,我想保持原樣。如何防止 fdupes 刪除我不希望它刪除的目錄中的檔案?
是否還有另一個重複查找實用程式?
答案1
是否還有另一個重複查找實用程式?
使用林特,它完全可以使用 --keep-all-tagged 選項來執行您想要的操作:
$ rmlint --types=duplicates --keep-all-tagged /path/to/dupes /other/path/to/dupes // main/folder/tree
答案2
為什麼不放慢這個過程並多加小心
從中取得重複項的比較fdupes
並將其放入文件中。
fdupes -r /path/to/start > filesToDelete
然後,您可以按照自己的速度刪除要保留的任何目錄或文件filesToDelete
刪除整個目錄
sed -i '|/directoryToKeep/|d' filesToDelete
在您喜歡的文字編輯器中完成工作filesToDelete
,並在您想要複製的每個文件的副本的開頭放置一個標記(也許是一個 x?)保持這樣您就可以追蹤您所做的事情,然後當您確定發生的變化時
cat aFile | xargs -d "\n" rm
rm
將在帶有 x 的每一行(以及由 生成的任何註釋或其他行fdupes
)拋出錯誤,但對這些文件不執行任何操作。但是,它將刪除 .txt 檔案中所有未標記的有效檔案名稱條目filesToDelete
。
答案3
這是一個簡短的腳本,用於對給定的第一個目錄進行優先排序。它不會直接刪除文件,只會列印一個清單供您刪除。它遵循以下規則:
- 不要列印任何文件
dir1
如果有任何文件不在 中
dir1
,則不要列印它。#!/usr/bin/env bash # priority_dup.sh dir1 dir2 [dir3 ...]` set1=() # List collects all matching files for a set. IFS=$'\n' fdupes -r "$@" | while read i; do if [[ "$i" == "" ]]; then # Create new set, minus all files from dir1. set2="$(echo "${set1[*]}" | grep -v "^$1/")" # If the sets are different, then we can print files for deletion. if [[ "${set1[*]}" != "$set2" && "$set2" != "" ]]; then echo "$set2" echo "" set1=() fi else set1+=("$i") fi done
將其儲存到文件中,將文件設為可執行文件,然後執行嘗試。