Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Удаление одинаковых файлов

Ответить
Настройки темы
[решено] Удаление одинаковых файлов

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте.

Итак: имеем каталог с подкаталогами в которых находятся текстовые файлы. В каждом файле есть строка ID-(далее идентификатор файла). У всех файлов разные имена. У некоторых совпадают размеры. Нужно удалить все файлы, кроме одного, у которых одинаковые ID. Файлы у которых совпадают размеры - наверняка будут с одинаковым ID (проверено на практике).

Нужно написать bash скрипт который это всё будет делать.

Я вижу алгоритм примерно так.

Нужно выбрать каталог.
Посмотреть какие в нём файлы.
Составить список файлов с одинаковыми размерами.
Взять первый из списка.
Посмотреть есть ли в тексте файла ID.
Если есть сравнить его со всеми файлами такого же размера.
Если ID совпадают удалить второй.
Повторять до тех пор пока не пройдём весь список.
Перейти в другой подкаталог.

С bash я имею дело очень недавно. Пару скриптов по переключению каналов я написал. А как тут быть представляю достаточно плохо (сказывается отсутствие опыта).

Прошу помощи с примерами и комментариями.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 16:20, 10-12-2010

 

Странный тип


Сообщения: 813
Благодарности: 73

Профиль | Отправить PM | Цитировать


Если есть строчка ID-, то размеры не нужны. Нужно сделать поиск по строке, а потом обработать результаты.

Я не сильный специалист. Вот что получилось:

id-dupes.sh
Код: Выделить весь код
#!/bin/sh

# Создаём заголовок для скрипта удаления
echo "#!/bin/sh" > rem-id.sh

# Выводим список файлов с ID
grep -R "ID-" $1 | \

# Сортируем по второму полю (ID)
sort -t":" -k2 | \

# Заменяем ":" на пробелы и добавляем "rm " в начало каждой строки
sed 's/:/ /g;s/^/rm /g' | \

# Находим повторяющиеся значения в третьем поле (ID) и выводим дубликаты
# кроме первого файла
uniq -f 2 -D -u | \

# Перенаправляем два первых поля (rm и имя файла) в скрипт удаления
cut -d " " -f 1,2  >> rem-id.sh

# Назначаем исполняемый атрибут
chmod +x rem-id.sh

exit
Запускать
id-dupes.sh <каталог_с_файлами>

Потом выполнить rem-id.sh в родительском каталоге.

Это будет работать, только если в именах файлов и каталогов нет пробелов.

-------
Сколько не думай, а лучше водки ничего не придумаешь.


Последний раз редактировалось Kent, 11-12-2010 в 12:11.


Отправлено: 04:27, 11-12-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Спасибо за скрипт. Протестирую и скажу что и как.

вот пока искал решение проблемы наткнулся на такую программу 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:~$

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Последний раз редактировалось Tonny_Bennet, 13-12-2010 в 16:15.


Отправлено: 15:24, 13-12-2010 | #3


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 177

Профиль | Отправить PM | Цитировать


Добрые люди помогли разобраться с программой. проблема была в том что это были жёсткие ссылки

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


Заработало

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 16:44, 14-12-2010 | #4



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » [решено] Удаление одинаковых файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ошибка - удаление файлов demoniac Microsoft Windows 2000/XP 23 01-09-2010 14:03
CMD/BAT - Удаление старых файлов по имени файлов Bиктор Скриптовые языки администрирования Windows 1 19-04-2010 03:37
CMD/BAT - [решено] Удаление одинаковых подпапок из родительской папки D_Master Скриптовые языки администрирования Windows 2 28-03-2009 15:08
удаление одинаковых папок в под папках clop1000 Хочу все знать 5 17-11-2007 00:51
Поиск одинаковых файлов Geo55 Программное обеспечение Windows 6 23-10-2004 10:01




 
Переход