wie teilt man fdupes mit, welche Dateien behalten werden sollen?

wie teilt man fdupes mit, welche Dateien behalten werden sollen?

Ich hatte Probleme mit meinem Backup und habe jetzt viele Ordner mehrfach auf meiner Festplatte. Ich habe einen Hauptordnerbaum, den ich so behalten möchte, wie er ist. Wie kann ich verhindern, dass fdupes Dateien in Verzeichnissen löscht, die ich nicht löschen möchte?

Gibt es vielleicht ein anderes Dienstprogramm zur Duplikatssuche?

Antwort1

Gibt es vielleicht ein anderes Dienstprogramm zur Duplikatssuche?

Verwendenrmlint, es macht genau das, was Sie wollen, indem Sie die Option --keep-all-tagged verwenden:

$ rmlint --types=duplicates --keep-all-tagged /path/to/dupes /other/path/to/dupes // main/folder/tree

Antwort2

Warum nicht den Prozess verlangsamen und etwas vorsichtiger sein?

Holen Sie sich den Vergleich der Duplikate fdupesund speichern Sie ihn in einer Datei.

fdupes -r /path/to/start > filesToDelete

Anschließend können Sie in Ihrem eigenen Tempo alle Verzeichnisse oder Dateien entfernen, die Sie behalten möchten.filesToDelete

So entfernen Sie ganze Verzeichnisse

sed -i '|/directoryToKeep/|d' filesToDelete 

Gehen Sie die Schritte filesToDeletein Ihrem bevorzugten Texteditor durch und setzen Sie am Anfang der Kopie jeder Datei, die Sie kopieren möchten, ein Zeichen (vielleicht ein x?).haltenSo können Sie verfolgen, was Sie getan haben, und dann, wenn Sie sich der Änderungen sicher sind

cat aFile | xargs -d "\n" rm

rmgibt bei jeder Zeile mit einem x (sowie bei jedem Kommentar oder anderen von generierten Zeilen fdupes) einen Fehler aus, führt aber nichts mit diesen Dateien aus. Es werden jedoch alle nicht markierten gültigen Dateinameneinträge in gelöscht filesToDelete.

Antwort3

Hier ist ein kurzes Skript, um das erste angegebene Verzeichnis zu priorisieren. Es löscht keine Dateien direkt, sondern druckt nur eine Liste zum Löschen aus. Es befolgt diese Regeln:

  1. Drucken Sie keine Dateien vondir1
  2. Wenn eine Datei nicht darin enthalten ist dir1, drucken Sie sie nicht.

    #!/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
    

    Speichern Sie es in einer Datei, legen Sie die Datei als ausführbar fest und versuchen Sie es.

verwandte Informationen