Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Скрипт для рекурсивного подсчета md5  (Прочитано 8445 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sergem

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
Здравствуйте!

       Необходимо написать скрипт который рекурсивно обходит директорию вглубь, подсчитывает md5 суммы файлов и пишет отчет в текстовый файл в виде:

директория
файл md5сумма

       Причем отчет должен лежать на уровень выше директории которая исследуется (из которой будет скрипт запускаться).
       Как это можно сделать? Какие команды смотреть? Пытался решить этот вопрос комбинируя команды: ls, comm, md5sum, less, cat и т.д.
       Подозреваю, что одной строкой это не решить, а придеться комбинировать в bash, здесь вообще никаких мыслей не возникает :(

Оффлайн Riateche

  • Активист
  • *
  • Сообщений: 279
    • Просмотр профиля
    • Idzaaus
Re: Скрипт для рекурсивного подсчета md5
« Ответ #1 : 27 Июня 2009, 23:33:44 »
Как насчет такого:

for i in `find *`
do
   echo $i `md5sum $i`
done

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #2 : 27 Июня 2009, 23:39:21 »
Как насчет такого:

for i in `find *`
do
   echo $i `md5sum $i`
done
Угу, только еще вывод в файл надо добавить... Т.е.:
for i in `find /путь/к_папке/*`
do
   echo $i `md5sum $i` >> /путь/к_файлу/с_суммами
done
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн Sergem

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #3 : 27 Июня 2009, 23:56:21 »
Как насчет такого:
(Нажмите, чтобы показать/скрыть)

Я добавил в начало: #!/bin/bash но скрипт не заработал :(

Угу, только еще вывод в файл надо добавить... Т.е.:
(Нажмите, чтобы показать/скрыть)

Вручную поменял пути и получил:

(Нажмите, чтобы показать/скрыть)

В директории же лежит:

(Нажмите, чтобы показать/скрыть)

т.е. сумма md5 почему то не посчиталась для всех файлов.
Файлы с пробелами разорваны :(
Желательно, чтобы скрипт был универсальный т.е. чтобы при вызове указать директорию, а он выдавал информацию туда откуда запущен, скажем в файл report.txt
Это возможно?

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #4 : 28 Июня 2009, 00:15:43 »
#!/bin/bash
echo -n "Укажите путь к директории назначения: "
read TARGET_DIR
cd $TARGET_DIR/..
for i in `find $TARGET_DIR/*`
    do
    md5sum $i >> ./md5sums
    done
:D
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн Sergem

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #5 : 28 Июня 2009, 00:38:48 »
(Нажмите, чтобы показать/скрыть)

       Вводил путь: /media/disk/on-write/test/ и /media/disk/on-write/test результат в файле md5sums один и тот же: d216ec3588744033537bbaaa69a148ec  /media/disk/on-write/test/files.txt
       Этот скрипт положил в файл schet вот какой вывод в консоли:
(Нажмите, чтобы показать/скрыть)

       Получается, что то нужно делать с пробелами. Я думаю может просто получить список в файл командой ls а потом разбирать файл, может командой sed, и подставлять в md5sum который в свою очередь будет перенаправлять результат в файл md5sums

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #6 : 28 Июня 2009, 00:46:39 »
У меня файлы с пробелами в именах спокойно читает... И выводит список в файл совершенно спокойно. :-
Значит делаю так:
protopopulus@sofocl:~$ ./summa
Укажите путь к директории назначения: ./packages
protopopulus@sofocl:~$
Выдает:
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 28 Июня 2009, 00:53:00:
Хотя да... Чёт тоже не хотит :idiot2:
« Последнее редактирование: 28 Июня 2009, 00:53:00 от Protopopulus »
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн Sergem

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #7 : 28 Июня 2009, 01:09:22 »
Опишу свои действия.
Скрипт в файле: schet.
(Нажмите, чтобы показать/скрыть)
В файле md5sums: d216ec3588744033537bbaaa69a148ec  ./test/files.txt и все :(

Теперь захожу в test:

(Нажмите, чтобы показать/скрыть)

Вообще ничего не получается :(

Я уже думал может через sed делать, примерно так:

sed s/.*/"&"/w newfile listls
где newfile - файл после обработки команды
listls - файл вывода команды ls строки которой экранируются кавычками.
       Если честно я не силен в команде sed, читаю документацию на множество команд, уже несколько дней пытаюсь решить эту задачу...

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #8 : 28 Июня 2009, 01:20:44 »
http://community.livejournal.com/ru_itips/1782.html :2funny: Скрепты, скрепты... Вот оно как :)
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн Sergem

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #9 : 28 Июня 2009, 01:31:56 »
http://community.livejournal.com/ru_itips/1782.html :2funny: Скрепты, скрепты... Вот оно как :)

Как все просто  :2funny:
На всякий случай подтяну сюда решение, чтобы потом быстро его находить, когда понадобится...
(Нажмите, чтобы показать/скрыть)

Огромное Вам спасибо за помощь в решении проблемы!!!

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #10 : 28 Июня 2009, 01:49:06 »
Итак, конечный результат:
#!/bin/bash
echo -n "Введите путь к директории: "
read VAR_DIR
find $VAR_DIR -type f -exec md5sum {} \; >> $VAR_DIR/../$VAR_DIR.md5
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт для рекурсивного подсчета md5
« Ответ #11 : 28 Июня 2009, 03:58:41 »
Protopopulus, интерактивные режимы в скриптах -- зло, ибо усложняют работу со скриптом при вызове его из другого скрипта. Используйте стандартные переменные для передачи значений параметров.

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #12 : 28 Июня 2009, 04:01:21 »
Ну, а если нужен именно интерактивный режим? То есть данный скрипт делает только то, что упрощает работу с командами, интерфейс, так сказать... :)
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скрипт для рекурсивного подсчета md5
« Ответ #13 : 28 Июня 2009, 04:18:50 »
Protopopulus, вся прелесть использования скрипта в максимальной автоматизации процесса его выполнения.
Почувствуйте разницу между:
$ sudo /etc/init.d/samba
Usage: /etc/init.d/samba {start|stop|reload|restart|force-reload|status}
$ sudo /etc/init.d/samba stop
 * Stopping Samba daemons                                                               [ OK ]
$ sudo /etc/init.d/samba start
 * Starting Samba daemons                                                               [ OK ]
$ sudo /etc/init.d/samba reload
 * Reloading /etc/samba/smb.conf smbd only
И теми же самыми действиями в интерактивном режиме.

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1695
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Скрипт для рекурсивного подсчета md5
« Ответ #14 : 28 Июня 2009, 04:31:50 »
ArcFi, я может, конечно, и по-другому воспринимаю мир, но все же считаю, что для такой задачи этот скрипт очень даже хорошо подходит. Соглашусь с тем, что запускать сервер лучше на полном автомате, а не руками, но указывать путь до папки с файлами через кучу всяческих непотребностей (в данном контексте, конечно) один раз в две-пять недель с тем условием, что путь к папке может быть другим, это уже извращение и "не linux-way" ;) Имхо, все должно быть максимально рационально, т.е. задачи должны выполняться минимальными средствами и усилиями с максимальной эффективностью. Пример тому - забивать гвоздь можно просто молотком, а можно и специальным устройством, где задается сила удара, частота ударов, положение гвоздя относительно перпендикуляра к объекту и т.п. :P
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

 

Страница сгенерирована за 0.022 секунд. Запросов: 21.