![]() |
Удаление одинаковых файлов
Здравствуйте.
Итак: имеем каталог с подкаталогами в которых находятся текстовые файлы. В каждом файле есть строка ID-(далее идентификатор файла). У всех файлов разные имена. У некоторых совпадают размеры. Нужно удалить все файлы, кроме одного, у которых одинаковые ID. Файлы у которых совпадают размеры - наверняка будут с одинаковым ID (проверено на практике). Нужно написать bash скрипт который это всё будет делать. Я вижу алгоритм примерно так. Нужно выбрать каталог. Посмотреть какие в нём файлы. Составить список файлов с одинаковыми размерами. Взять первый из списка. Посмотреть есть ли в тексте файла ID. Если есть сравнить его со всеми файлами такого же размера. Если ID совпадают удалить второй. Повторять до тех пор пока не пройдём весь список. Перейти в другой подкаталог. С bash я имею дело очень недавно. Пару скриптов по переключению каналов я написал. А как тут быть представляю достаточно плохо (сказывается отсутствие опыта). Прошу помощи с примерами и комментариями. |
Если есть строчка ID-, то размеры не нужны. Нужно сделать поиск по строке, а потом обработать результаты.
Я не сильный специалист. Вот что получилось: id-dupes.sh Код:
#!/bin/sh id-dupes.sh <каталог_с_файлами> Потом выполнить rem-id.sh в родительском каталоге. Это будет работать, только если в именах файлов и каталогов нет пробелов. |
Спасибо за скрипт. Протестирую и скажу что и как.
вот пока искал решение проблемы наткнулся на такую программу http://ru.wikipedia.org/wiki/Fdupes но она как то криво работает. По идее она сравнивает 2 файла используя md5sum. Я запускаю программу в каталоге где заведомо есть 2 одинаковых файла. Когда руками сравниваю их суммы - они одинаковые а вот Fdupes их не находит. В чём может быть косяк не подскажите? max@mail:~$ ls -la ./test -rw-rw-rw- 2 root root 17890 2010-12-13 13:15 1292235300.M968450P952.mail,W=18195,S=17890:2,ST max@mail:~$ sudo md5sum ./test/1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd a9ffcfb1b8dbab357ccd0e756fac7930 ./test/1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd max@mail:~$ sudo md5sum ./test/1292235300.M968450P952.mail,W=18195,S=17890:2,ST a9ffcfb1b8dbab357ccd0e756fac7930 ./test/1292235300.M968450P952.mail,W=18195,S=17890:2,ST max@mail:~$ sudo fdupes -N -d -R ./test max@mail:~$ |
Добрые люди помогли разобраться с программой. проблема была в том что это были жёсткие ссылки
max@mail:~$ ls -i ./test 9306353 1292226338.M541220P30122.mail,W=37716,S=37165:2,d 9306353 1292226338.M598265P29618.mail,W=37716,S=37165:2,ST 9306354 1292228430.M563987P30122.mail,W=47115,S=46445:2,ad 9306354 1292228430.M566001P29618.mail,W=47115,S=46445:2,ad 9306355 1292229249.M327689P30122.mail,W=7163,S=6995:2,a 9306355 1292229249.M401242P29618.mail,W=7163,S=6995:2,ST 9306356 1292229840.M667082P30122.mail,W=7942,S=7754:2,a 9306356 1292229840.M746282P29618.mail,W=7942,S=7754:2,ST 9306357 1292232068.M880728P30122.mail,W=3320,S=3247:2,a 9306357 1292232068.M884892P29618.mail,W=3320,S=3247:2,a 9306358 1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd 9306358 1292235300.M968450P952.mail,W=18195,S=17890:2,ST Нашёл в мануале -H --hardlinks normally, when two or more files point to the same disk area they are treated as non-duplicates; this option will change this behavior выполнил max@mail:~$ sudo fdupes -N -d -H -R ./test получил 9306348 1292220330.M350171P29618.mail,W=59637,S=58699:2,a 9306350 1292220330.M350173P29618.mail,W=67005,S=66082:2,a 9306352 1292220330.M350175P29618.mail,W=20093,S=19789:2,a 9306353 1292226338.M598265P29618.mail,W=37716,S=37165:2,ST 9306354 1292228430.M563987P30122.mail,W=47115,S=46445:2,ad 9306355 1292229249.M401242P29618.mail,W=7163,S=6995:2,ST 9306356 1292229840.M746282P29618.mail,W=7942,S=7754:2,ST 9306357 1292232068.M880728P30122.mail,W=3320,S=3247:2,a 9306358 1292235300.M935468P30122.mail,W=18195,S=17890:2,Sd Заработало |
Время: 09:39. |
Время: 09:39.
© OSzone.net 2001-