У меня есть папка с дублирующимися (на md5sum
( md5
Mac)) файлами, и я хочу иметьхрон Работа запланирована, чтобы удалить все найденные.
Тем не менее, я застрял на том, как это сделать. Что у меня так далеко:
md5 -r * | sort
Который выводит что-то вроде этого:
04c5d52b7acdfbecd5f3bdd8a39bf8fb gordondam_en-au11915031300_1366x768.jpg
1e88c6899920d2c192897c886e764fc2 fortbourtange_zh-cn9788197909_1366x768.jpg
266ea304b15bf4a5650f95cf385b16de nebraskasupercell_fr-fr11286079811_1366x768.jpg
324735b755c40d332213899fa545c463 grossescheidegg_en-us10868142387_1366x768.jpg
3993028fcea692328e097de50b26f540 Soyuz Spacecraft Rolled Out For Launch of One Year Crew.png
677bcd6006a305f4601bfb27699403b0 lechaustria_zh-cn7190263094_1366x768.jpg
80d03451b88ec29bff7d48f292a25ce6 ontariosunrise_en-ca10284703762_1366x768.jpg
b6d9d24531bc62d2a26244d24624c4b1 manateeday_row10617199289_1366x768.jpg
ca1486dbdb31ef6af83e5a40809ec561 Grueling Coursework.jpg
cdf26393577ac2a61b6ce85d22daed24 Star trails over Mauna Kea.jpg
dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x768.jpg
dc3ad6658d8f8155c74054991910f39c smoocave_en-au10358472670_1366x7682.jpg
Как я могу обработать основанный на MD5 файл для удаления дубликатов? Мне все равно, какой «оригинал» я храню, но я хочу сохранить только один
Должен ли я подходить к этому по-другому?
bash
shell-script
hashsum
duplicate
кроличий садок
источник
источник
fdupes
команда, которая сделает это ... Не знаю, в каком дистрибутиве вы находитесь, но в пакете Debian с тем же именем. Кроме того, MD5 в настоящее время является довольно слабым хэшем; Вы, вероятно, хотите использоватьsha256sum
или лучшеsha512sum
(что на самом деле должно быть быстрее на обычном ПК)Ответы:
Я работаю над Linux, что означает команду,
md5sum
которая выводит:Теперь с помощью
awk
иxargs
команда будет:В
awk
части инициализируетlasthash
с пустой строки, которые не будут соответствовать какой - либо хэш, а затем проверяет каждую строку , если хэш вlasthash
такой же , как хэш (первый столбец) текущего файла (второй столбец). Если это так, он распечатывает это. В конце каждого шага он будет установленlasthash
на хеш текущего файла (вы можете ограничить его, если он будет отличаться, только если хэши разные, но это должно быть второстепенным, особенно если у вас мало подходящих файлов). Имена файлов, которыми выплевывает awk, передаются сrm
помощьюxargs
, что в основном вызываетrm
то, чтоawk
нам дает часть.Вы, вероятно, должны фильтровать каталоги раньше
md5sum *
.Редактировать:
Используя метод Marcins, вы также можете использовать этот:
Это вычитание из списка файлов, открытого
ls
первым именем файла каждого уникального хэша, выбранногоmd5sum * | sort -k1 | uniq -w 32 | awk '{print $2}'
.источник
md5 -r * | sort -t ' ' -k 4 -r | awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' | xargs rm
это вызов на OS X (по предложению Стивена Китта , я ставлюecho 'will remove '
в конце, прежде чем пытаться это сделатьrm
)sort -t ' ' -k 4 -r
наsort
.Вы можете идентифицировать дубликаты файлов, используя следующую команду:
источник
Я наткнулся на fdupes как ответ на этот похожий вопрос: /superuser/386199/how-to-remove-duplicated-files-in-a-directory
Я был в состоянии
apt-get install fdupes
на Ubuntu. Вы определенно захотите прочитать справочную страницу. В моем случае я смог получить желаемые результаты примерно так:fdupes -qdN -r /ops/backup/
Который говорит: «Посмотрите рекурсивно через / ops / backup и найдите все дубликаты файлов: сохраните первую копию любого данного файла и спокойно удалите остальные». Это позволяет легко сохранять несколько дампов базы данных с нечастой записью.
источник
Если вы спешите (или у вас много файлов) и хотите избежать какой-либо дополнительной нагрузки (это занимает время), но вы не возражаете против затрат памяти на хеш-таблицу (или у вас много оперативной памяти с вашими партиями) файлов),
find . -type f -print0
: Найти все файлы и вывести их с именами, заканчивающимися на нольxargs -0 md5sum
: вычислять хэши параллельно (отрегулировать-n
max-args и-P
max-procs по желанию, см.man xargs
)awk 'h[$1]{ printf "%s\0", $2; next }{ h[$1] = $2 }'
: если в хеш-таблице awk есть запись, содержащая сумму md5, которую мы сейчас просматриваем, то выведите имя файла, который мы сейчас просматриваем, с нулевым символом в конце. В противном случае добавьте имя файла в хеш-таблицу.xargs -0 rm
: возьмите введенные строки с нулевым окончанием и отправьте их в rm.Это намного быстрее, чем fdupes.
Если у вас есть имя файла, которое содержит символ новой строки, awk, вероятно, обрежет его до новой строки, так как md5sum также разделяет записи по символам новой строки.
Это основано на /programming/11532157/remove-duplicate-lines-without-sorting и /programming/9133315/how-can-i-output-null-terminated- строки-в-AWK
источник
источник
Особенности:
ls
с--color=always
источник