如何告訴 fdupes 要保留哪些檔案?

如何告訴 fdupes 要保留哪些檔案?

我的備份遇到了問題,現在我的硬碟上有很多資料夾。我有一個主要的“文件夾樹”,我想保持原樣。如何防止 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

這是一個簡短的腳本,用於對給定的第一個目錄進行優先排序。它不會直接刪除文件,只會列印一個清單供您刪除。它遵循以下規則:

  1. 不要列印任何文件dir1
  2. 如果有任何文件不在 中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
    

    將其儲存到文件中,將文件設為可執行文件,然後執行嘗試。

相關內容