Проверка дубликатов в терминале? - PullRequest
3 голосов
/ 07 марта 2009

Следующий код выводит на печать длинный список файлов с хэшами и именами файлов

md5sum *.java

Я безуспешно пытался перечислить строки, в которых встречаются идентичные хэши, чтобы я мог затем удалить идентичные файлы.

Как вы можете фильтровать и удалять идентичные файлы с одинаковым содержанием?

Ответы [ 4 ]

3 голосов
/ 25 июля 2015

fdupes и меньше просмотр дубликатов

Используйте fdupes, которая является программой командной строки, такой как

fdupes -r /home/masi/Documents/ > /tmp/1 
less -M +Gg /tmp/1

, который находит все дубликаты и сохраняет их в файле в temp. Команда less показывает вам позицию строки всех строк и вашу работу в процентах. Я нашел fdupes из этого ответа и его ясной статьи в Википедии здесь . Вы можете установить его с помощью homebrew в OSX и apt-get в Linux.

Использование fdupes в интерактивном режиме с возможным удалением

Run

fdupes -rd /home/masi/Documents

, который позволяет вам выбрать, какую копию удалять или нет, пример просмотра интерактивной работы:

Set 4 of 2664, preserve files [1 - 2, all]: all

   [+] /home/masi/Documents/Exercise 10 - 1.4.2015/task.bib
   [+] /home/masi/Documents/Exercise 9 - 16.3.2015/task.bib

[1] /home/masi/Documents/Celiac_disease/jcom_jun02_celiac.pdf
[2] /home/masi/Documents/turnerWhite/jcom_jun02_celiac.pdf

Set 5 of 2664, preserve files [1 - 2, all]: 2

   [-] /home/masi/Documents/Celiac_disease/jcom_jun02_celiac.pdf
   [+] /home/masi/Documents/turnerWhite/jcom_jun02_celiac.pdf

где вы видите, что у меня 2664 дубликата. Было бы неплохо иметь какой-то статический файл, который бы сохранял настройки моих разыскиваемых файлов; Я открыл тему об этом здесь . Например, в некоторых упражнениях и домашних заданиях у меня одни и те же файлы bib-файлов, поэтому не спрашивайте второй раз, когда пользователь захочет получить дубликат.

3 голосов
/ 07 марта 2009

Это должно работать:

md5sum *.java | sort | uniq -d -w32

Это говорит uniq сравнивать только первые 32 символа, которые являются только суммой md5, а не именами файлов.

РЕДАКТИРОВАТЬ: Если -w не доступен, попробуйте:

md5sum *.java | awk '{print $1}' | sort | uniq -d

Недостатком является то, что вы не будете знать, какие файлы имеют эти дублирующие контрольные суммы ... в любом случае, если контрольных сумм не слишком много, вы можете использовать

md5sum *.java | grep 0bee89b07a248e27c83fc3d5951213c1

, чтобы получить имена файлов впоследствии (контрольная сумма выше - только пример). Я уверен, что есть способ сделать все это в сценарии оболочки.

2 голосов
/ 07 марта 2009

Даже лучше:

md5sum *.java | sort | uniq -d

Это печатает только дубликаты строк.

1 голос
/ 07 марта 2009

В этом списке перечислены все файлы, между пробелами стоит пустая строка:

$ md5sum *.txt \ 
  | sort       \
  | perl -pe '($y)=split; print "\n" unless $y eq $x; $x=$y'

05aa3dad11b2d97568bc506a7080d4a3  b.txt
2a517c8a78f1e1582b4ce25e6a8e4953  n.txt
e1254aebddc54f1cbc9ed2eacce91f28  a.txt
e1254aebddc54f1cbc9ed2eacce91f28  k.txt
e1254aebddc54f1cbc9ed2eacce91f28  p.txt
$

Для печати только 1-го числа в каждой группе:

$ md5sum *.txt | sort | perl -ne '($y,$f)=split; print "$f\n" unless $y eq $x; $x=$y'
b.txt
n.txt
a.txt
$ 

, если вы смелы, измените «если» на «если», а затем

$ rm `md5sum ...`

для удаления всех, кроме первой, каждой группы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...