como dizer ao fdupes quais arquivos manter?

como dizer ao fdupes quais arquivos manter?

Tive problemas com meu backup e agora tenho muitas pastas diversas vezes no meu HD. Eu tenho uma 'árvore de pastas' principal, que quero manter como está. Como posso evitar que o fdupes exclua arquivos em diretórios que não quero que sejam excluídos?

Existe talvez outro utilitário de localização de duplicatas?

Responder1

Existe talvez outro utilitário de localização de duplicatas?

Usarrmlint, ele faz exatamente o que você deseja usando a opção --keep-all-tagged:

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

Responder2

Por que não desacelerar o processo e tomar alguns cuidados

Obtenha a comparação de duplicatas fdupese coloque-a em um arquivo.

fdupes -r /path/to/start > filesToDelete

Então, no seu próprio ritmo, você pode remover quaisquer diretórios ou arquivos que deseja manter dofilesToDelete

Para remover diretórios inteiros

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

Trabalhe filesToDeleteem seu editor de texto preferido e coloque um marcador (talvez um x?) no início da cópia de cada arquivo que desejamanterpara que você possa acompanhar o que fez e, então, quando tiver certeza das alterações

cat aFile | xargs -d "\n" rm

rmlançará um erro em cada linha com um x (bem como em qualquer comentário ou outras linhas geradas por fdupes), mas não fará nada com esses arquivos. No entanto, ele excluirá todas as entradas de nomes de arquivo válidos não marcadas em filesToDelete.

Responder3

Aqui está um pequeno script para priorizar o primeiro diretório fornecido. Ele não exclui arquivos diretamente, apenas imprime uma lista para você excluir. Segue estas regras:

  1. Não imprima nenhum arquivo dedir1
  2. Se algum arquivo não estiver em dir1, não o imprima.

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

    Salve-o em um arquivo, defina-o como executável e execute-o.

informação relacionada