como dizer ao fdupes quais arquivos manter?

1

Eu tive problemas com meu backup e agora tenho muitas pastas várias vezes no meu HD. Eu tenho uma 'árvore de pastas' principal, que eu quero manter como está. Como posso evitar que os fdupes excluam arquivos em diretórios que eu não quero excluir?

Existe algum outro utilitário de localização duplicada?

    
por Nepumuk 29.11.2017 / 16:46

3 respostas

1

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

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

fdupes -r /path/to/start > filesToDelete

Depois, na sua própria velocidade, você pode remover todos os diretórios ou arquivos que deseja manter do filesToDelete

Para remover diretórios inteiros

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

Trabalhe com filesToDelete em seu editor de texto preferido e coloque um marcador (talvez um x?) no início da cópia de cada arquivo que você deseja manter para que você possa acompanhar o que você fez, e então, quando tiver certeza das mudanças

cat aFile | xargs -d "\n" rm

rm lançará um erro em cada linha com um x (assim como em qualquer comentário ou outras linhas geradas por fdupes ), mas não fará nada para esses arquivos. No entanto, excluirá todas as entradas de nome de arquivo válidas não marcadas em filesToDelete .

    
por 29.11.2017 / 19:14
0

Is there maybe another duplicate finding utility?

Use rmlint , ele faz exatamente o que você quer usando a opção --keep-all-tagged:

$ rmlint --types=duplicates --keep-all-tagged /path/to/dupes /other/path/to/dupes // main/folder/tree
    
por 23.01.2018 / 21:46
0

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

  1. Não imprima arquivos de dir1
  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 arquivo como executável e execute o teste.

por 27.08.2018 / 17:41

Tags