[sh]: контроль содержимого файлов и каталогов (md5sum + ls -l)

Модератор: Модераторы разделов

AndreyMust19
Сообщения: 19
ОС: Windows XP

[sh]: контроль содержимого файлов и каталогов

Сообщение AndreyMust19 »

Задумал написать утилиту, которая записывала бы в файл не только ls -l, но и md5 каждого файла (и каталога тоже).
Сначала пробывал на perl, но думаю, что на shell будет намного короче.

Список файлов записываю во временный файл командой find.
ls -l сообщит все права доступа и размер, awk запишет все кроме имен файлов в еще один временный файл.
md5sum сообщит md5 все файлов в созданном списке (awk выведет только хэши в 3-ий временный файл).
"Склеять" 2-ой и 3-ий временные файлы можно тоже с помощью awk.

Проблема в том, как эти строки из временного файла:
/home/dir/первый файл
/usr/bin/file
/home/dir/fi#$le3

Передать консольным командам ls и md5 вот так:
md5sum "/home/dir/первый файл" "/usr/bin/file" "/home/dir/fi#$le3"


И еще. md5sum не может подсчитывать md5 для каталогов. Как с этим быть?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5489
ОС: Gentoo

Re: [sh]: контроль содержимого файлов и каталогов

Сообщение /dev/random »

AndreyMust19 писал(а):
02.10.2010 19:49
Задумал написать утилиту, которая записывала бы в файл не только ls -l, но и md5 каждого файла (и каталога тоже).
Сначала пробывал на perl, но думаю, что на shell будет намного короче.

Список файлов записываю во временный файл командой find.
ls -l сообщит все права доступа и размер, awk запишет все кроме имен файлов в еще один временный файл.
md5sum сообщит md5 все файлов в созданном списке (awk выведет только хэши в 3-ий временный файл).
"Склеять" 2-ой и 3-ий временные файлы можно тоже с помощью awk.

Проблема в том, как эти строки из временного файла:
/home/dir/первый файл
/usr/bin/file
/home/dir/fi#$le3

Передать консольным командам ls и md5 вот так:
md5sum "/home/dir/первый файл" "/usr/bin/file" "/home/dir/fi#$le3"


find -exec ls -ld {} \; -exec md5sum {} \;
Склеить после этого строки труда не составит.

AndreyMust19 писал(а):
02.10.2010 19:49
И еще. md5sum не может подсчитывать md5 для каталогов. Как с этим быть?

Смотря что вы подразумеваете под "md5 для каталогов"
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: [sh]: контроль содержимого файлов и каталогов

Сообщение eddy »

Кстати, хранить лучше не в файле, а в базе данных (например, при помощи sqlite) - проверка будет происходить намного быстрее.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: [sh]: контроль содержимого файлов и каталогов

Сообщение rm_ »

Это ж надо быть таким изобретателем велосипеда, автор, откройте для себя cfv.
Спасибо сказали:
AndreyMust19
Сообщения: 19
ОС: Windows XP

Re: [sh]: контроль содержимого файлов и каталогов

Сообщение AndreyMust19 »

Спасибо, /dev/random, вот что написал:

Код: Выделить всё

file1=$(mktemp /tmp/list.XXX)
find ~/sources -exec ls -ld {} \; 1>$file1
find ~/sources -exec md5sum {} \; 2>&1 | awk -v ORS="" '{getline x<f;print x," ";if ( $1 != "md5sum:" )  print $1;print "\n";}' f=$file1

Выводит следующее:
drwxr-xr-x 2 andrey andrey 4096 Окт 2 22:35 /home/andrey/sources/sh
-rwxr--r-- 1 andrey andrey 1198 Окт 2 22:35 /home/andrey/sources/sh/proba.sh ed045bccfc93785d694dd362a9e3b14b
-rwxr--r-- 1 andrey andrey 51 Авг 5 20:20 /home/andrey/sources/sh/list_dir.sh ac7623c5de762dd2f00393cd47b62649
-rw-r--r-- 1 andrey andrey 128 Июл 30 12:45 /home/andrey/sources/sh/hello.sh~ 854b3f0087691f66f4736766b769d1eb
-rw-r--r-- 1 andrey andrey 1196 Окт 2 22:35 /home/andrey/sources/sh/proba.sh~ 9a0665f51e0afd8fe1f7faec2ae4e4e9
-rw-r--r-- 1 andrey andrey 38 Авг 5 20:20 /home/andrey/sources/sh/list_dir.sh~ afb1f7065b9a72cb9049f7b48307e34d
-rwxr--r-- 1 andrey andrey 765 Окт 2 20:18 /home/andrey/sources/sh/control_files.sh 8903fcff9cfe42a00531d9fe3eee2989
-rw-r--r-- 1 andrey andrey 660 Окт 2 18:04 /home/andrey/sources/sh/control_files.sh~ 356dda8c109b5b6b8380965090a16b40
drwxr-xr-x 2 andrey andrey 4096 Сен 11 17:23 /home/andrey/sources/lisp
-rwxr--r-- 1 andrey andrey 971 Авг 13 22:30 /home/andrey/sources/lisp/proba.lisp 5eb194fd84cb4b230b9800e2a3a6d5fe
-rw-r--r-- 1 andrey andrey 964 Авг 11 17:05 /home/andrey/sources/lisp/proba.lisp~ 22b98c9441628fe0dcc3534e4ecd0ccc
-rw-r--r-- 1 andrey andrey 455 Сен 11 11:49 /home/andrey/sources/lisp/func.lisp 602ec525349930574dd1e8efab8f4868
-rw-r--r-- 1 andrey andrey 454 Сен 11 11:49 /home/andrey/sources/lisp/func.lisp~ 889b5988478d6d7ae5528d29da9cc11f
-rw-r--r-- 1 andrey andrey 8082 Окт 1 14:09 /home/andrey/sources/md5sums 70526e127f19c9906993a3cf1ff596e0
-rw-r--r-- 1 andrey andrey 146 Авг 8 09:15 /home/andrey/sources/proba.c daf60a5ad3807c174f0c498252b40191
-rw-r--r-- 1 andrey andrey 93 Авг 8 09:14 /home/andrey/sources/proba.c~ e9df9f44004478d8ed49e62ac3656167
-rw-r--r-- 1 andrey andrey 3773 Окт 1 14:09 /home/andrey/sources/output d8e3a94a7ba4fe44e9df1217248ace68

Прям как надо!

Сравнение можно сделать командой patch.
А текстовой вид отчета нужен для наглядности - чтобы пользователь сам смог посмотреть.
Спасибо сказали: