Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка файла на уникальность, и сравнение деревьев из коробки 
:(
    Опции темы
powerfox
Дата 23.10.2009, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Нужно проверить, является ли данный файл уникальным для определённого дерева каталогов. Вторая задача: сравнить деревья и найти уникальные файлы в каждом из них. Есть что-нибудь стандартное или нужны свои скрипты (в общем-то скрипты довольно простые)?



--------------------
user posted image
PM WWW   Вверх
Imple
Дата 23.10.2009, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1546
Регистрация: 14.9.2007
Где: Алма-Ата

Репутация: 21
Всего: 87



В каком плане уникальным? По содержимому, имени, или еще чему? Уточни плиз ;-)


--------------------
Не шалю, никого не трогаю, починяю сервер.
PM WWW ICQ Skype GTalk Jabber   Вверх
powerfox
Дата 23.10.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Цитата(Imple @  23.10.2009,  22:45 Найти цитируемый пост)
В каком плане уникальным? По содержимому, имени, или еще чему? Уточни плиз ;-) 

По содержимому. Считается, что файлы с одинаковым именем могут быть одинаковыми, но не всегда, а вот одинаковые по содержанию всегда имеют одинаковые имена.

Скрипт делает следующее: ищет внутри дерева (папка, откуда выполнен скрипт) все файлы с именем, как и у $1, а потом использует cmp для каждого из найденых. В принципе, довольно просто (и несложно сделать сравнее деревьев, правда, простая версия без оптимизации будет долго работать).

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




--------------------
user posted image
PM WWW   Вверх
Imple
Дата 23.10.2009, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1546
Регистрация: 14.9.2007
Где: Алма-Ата

Репутация: 21
Всего: 87



Ммм... почти на 100% уверен что решения из коробки не существует. Прелагаю посмотреть в сторону алгоритмов хеширования и привязать их ПО для постоянного мониторинга изменения файлов (тем же inotify) и ведения базы актуальных хешей, в помощью которой можно в миг выдать любые уникальные файлы. Хотя, лучше воспользоваться SHA512, погрешность меньше smile


--------------------
Не шалю, никого не трогаю, починяю сервер.
PM WWW ICQ Skype GTalk Jabber   Вверх
powerfox
Дата 24.10.2009, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Цитата(Imple @  23.10.2009,  23:47 Найти цитируемый пост)
Прелагаю посмотреть в сторону алгоритмов хеширования и привязать их ПО для постоянного мониторинга изменения файлов (тем же inotify) и ведения базы актуальных хешей, в помощью которой можно в миг выдать любые уникальные файлы.

Да мне, в принципе, на 1 раз нужно. Это архив фоток. Я иногда скидывал на машину А, а иногда Б. Соответственно есть бекапы (просто наболванил…) с обеих машин, а оригиналы могут быть обновлены. В итоге, получилось, что есть несколько дисков с одними и теми же фотографиями, но предположительно на каждом есть что-то уникальное. Ещё недавно в основном хранилище помереименовывал папки, что усложняет ручную сортировку.

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


--------------------
user posted image
PM WWW   Вверх
Фантом
Дата 24.10.2009, 00:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 10
Всего: 49



Цитата(powerfox @  24.10.2009,  00:07 Найти цитируемый пост)

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


Можно соорудить такой простенький скрипт (например для каталога /home/user). Сначала 
Код

find /home/user/manydupfiles -type f | while read name; do echo "$name" >> /tmp/dupsearch_`md5sum "$name" | sed 's/[ ].*//g'`; done


Это мы получили список md5 сумм (в виде файлов /tmp/dupsearch_сумма) и соответствующих им файлов (внутри).
Далее удаляем суммы, которым соответствует только один файл:
Код

ls /tmp | grep ^dupsearch_ | while read name; do [ `cat "/tmp/$name" | wc -l` -lt 2 ] && rm "/tmp/$name"; done


В итоге получается какое-то количество списков дубликатов, с которыми можно что-то делать дальше.
PM   Вверх
powerfox
Дата 24.10.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 26
Всего: 97



Фантом, консольная магия во всей красе!
Пока не проверял, но главное — идея. Спасибо за красивое решение проблемы.


--------------------
user posted image
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.