Как удалить дубликаты файлов с помощью fdupes?

15

При запуске fdupesон находит более 30 000 дубликатов файлов. Мне нужно сохранить один файл и удалить все остальные дубликаты (потому что некоторые из них являются системными файлами). Пожалуйста, дайте мне команду или скрипт, чтобы сделать это, не нажимая «1 или 2 или все» для каждой группы дубликатов файлов.

user84055
источник

Ответы:

23

Вы можете сделать это, если хотите запустить это без вывода сообщений (я только что использовал его, чтобы очистить 150 ГБ дубликатов, работающих в хранилище блоков в стойке .. $ kerching !!)

fdupes -rdN dir/

r - recursive
d - preserver first file, delete other dupes
N - run silently (no prompt)
user288359
источник
Разве нет опции, которая бы перемещала в корзину вместо удаления дубликатов?
Августин Ридингер
2
Сделалfor f in $(fdupes -f .); do gvfs-trash $f; done
Августин Ридингер
2
@AugustinRiedinger: еще лучше, fdupes -f . | xargs -rd '\n' -- gvfs-trashесли у вас есть имена файлов с пробелами и специальными символами или много файлов.
Дэвид Фёрстер
@DavidFoerster, у вас все еще могут быть имена файлов с символами новой строки, что нарушит вашу команду.
Руслан
@Ruslan: Это правильно, но на данный момент fdupesне предоставляет опцию для записей с нулевым символом в конце, так что лучшего варианта нет. Это определенно намного лучше, чем, for f in $(fdupes ...)хотя. : -]
Дэвид Фёрстер
9

fdupes имеет богатый CLI:

fdupes -r ./stuff > dupes.txt

Затем удалить дубликаты было так же просто, как проверить dupes.txtи удалить поврежденные каталоги. fdupesтакже может предложить вам удалить дубликаты, как вы идете вместе.

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

Вывод команды идет в duplicate.txt.

fdupes будет сравнивать размер и MD5 хэш файлов, чтобы найти дубликаты.

Проверьте fdupesman-страницу для подробной информации об использовании.

Амол Сэйл
источник
Я нашел путь. да 1 | fdupes -rd / mnt / hda5 / midi_files
user84055
См. Также superuser.com/a/691551/122096
x29a
2

Я бы использовал этот более безопасный способ:

Создайте скрипт и переместите дубликаты файлов в новую папку. Если вы переместитесь в папку за пределами исходной папки, fdupes не будет сообщать о дублированных файлах при втором сканировании, и будет безопаснее их удалить.

#!/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
источник
1

Я использовал fslint и DupeGuru уже довольно давно.

  • FSlint поддерживает выбор по шаблону и другим методам очистки
  • DupeGuru поддерживает регулярные выражения

Оба могут обрабатывать> 10000 файлов / папок

СЕБ
источник