Como excluir arquivos duplicados com fdupes?

14

Quando executo, fdupesele encontra mais de 30.000 arquivos duplicados. Eu preciso manter um arquivo e excluir todas as outras duplicatas (porque algumas delas são arquivos de sistema). Por favor, me dê um comando ou script para fazer isso sem pressionar "1 ou 2 ou todos" para cada grupo de arquivos duplicados.

user84055
fonte

Respostas:

22

Você pode fazer isso se quiser executá-lo silenciosamente (eu apenas o usei para limpar 150 GB de dupes em execução no armazenamento em bloco do espaço na prateleira .. £ kerching !!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
user288359
fonte
Não existe uma opção que se mova para a lixeira em vez de excluir enganos?
Augustin Riedinger 21/03
2
Fezfor f in $(fdupes -f .); do gvfs-trash $f; done
Augustin Riedinger
2
@AugustinRiedinger: Melhor ainda seria fdupes -f . | xargs -rd '\n' -- gvfs-trashse você tiver nomes de arquivos com espaços e caracteres especiais ou muitos arquivos.
David Foerster
@DavidFoerster você ainda pode ter nomes de arquivos com novas linhas, o que quebrará seu comando.
Ruslan #
@Ruslan: Isso está correto, mas no momento fdupesnão oferece uma opção para registros terminados em nulo, portanto não há opção melhor. Definitivamente, é muito melhor do for f in $(fdupes ...)que isso. : -]
David Foerster 14/10
9

fdupes tem uma CLI rica:

fdupes -r ./stuff > dupes.txt

Em seguida, excluir as duplicatas era tão fácil quanto verificar dupes.txte excluir os diretórios incorretos. fdupestambém pode solicitar que você exclua as duplicatas à medida que avança.

fdupes -r /home/user > /home/user/duplicate.txt

A saída do comando entra duplicate.txt.

fdupes irá comparar o tamanho e o hash MD5 dos arquivos para encontrar duplicatas.

Verifique a página de fdupesmanual para obter informações detalhadas de uso.

Amol Sale
fonte
Eu encontrei um caminho. sim 1 | fdupes -rd / mnt / hda5 / midi_files
user84055
Veja também superuser.com/a/691551/122096
x29a 30/07/2015
2

Eu usaria desta maneira mais segura:

Crie um script e mova os arquivos duplicados para uma nova pasta. Se você mudar para uma pasta fora da pasta original, o fdupes não reportará os arquivos duplicados em uma segunda varredura e será mais seguro excluí-los.

#!/bin/bash

# Save default separator definitions
oIFS=$IFS
# define new line as a separator, filenames can have spaces
IFS=$'\n';

# For each file (f) listed as duplicated by fdupes, recursively
  for f in `fdupes -r -f .`
  do
    # Log the files I'm moving
    echo "Moving $f to folder Duplicates" >> ~/log.txt
    # Move the duplicated file, keeping the original in the original folder
    mv $f Duplicates/
  done

# restore default separator definitions
IFS=$oIFS
LinuxHelper
fonte
1

Eu tenho usado fslint e DupeGuru por algum tempo.

  • O FSlint suporta a seleção por curinga e outros métodos de limpeza
  • DupeGuru suporta regex

Ambos podem lidar com> 10000 arquivos / pastas

seb
fonte