На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 30.07.2010 17:20
Задача: сравнить файлы и найти в них изменения.
Структура файлов:
1.txt
Код: Выделить всё
e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php
b154b0bdd10546dce45df39db9107c12 ./forum/login.php
258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php
049346916619626250875b47e93fe533 ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php
v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php
g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif
2.txt
Код: Выделить всё
258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php
g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php
b154b0bdd10546dce45df39db9107c12 ./forum/login.php
v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif
7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php
Делаю следующим образом:
Код: Выделить всё
sort ./1.txt -t ' ' -k2 > 11.txt
sort ./2.txt -t ' ' -k2 > 22.txt
Отсортировываю структуру файлов по второму столбцу.
Получаем отчет.
Код: Выделить всё
v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php | 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/t | v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/t
b154b0bdd10546dce45df39db9107c12 ./forum/login.php b154b0bdd10546dce45df39db9107c12 ./forum/login.php
258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.ph 258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.ph
049346916619626250875b47e93fe533 ./forum/picturecomment.php | g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php
e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php
Т.е. видно что происходит обрезание длинных строк на выходе при сравнении.
Как быть, лечить?
Можно ли сократить сам процесс, присутствуют ли ошибки с моей стороны? Возможно есть более приятные решения.
Спасибо.
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo
Сообщение
/dev/random » 30.07.2010 17:32
Двухколоночный формат обычно используется для чтения человеком, и обрезание длинных строк здесь, в общем-то, естественно. Как вы будете использовать этот дифф, может быть тут лучше выбрать другой формат?
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 30.07.2010 17:35
/dev/random писал(а): ↑ 30.07.2010 17:32
Двухколоночный формат обычно используется для чтения человеком, и обрезание длинных строк здесь, в общем-то, естественно. Как вы будете использовать этот дифф, может быть тут лучше использовать другой формат?
у меня есть какие то другие варианты? Просто я не знаю другого способа что бы сравнить содержания.
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo
Сообщение
/dev/random » 30.07.2010 17:39
Grih65kop писал(а): ↑ 30.07.2010 17:35
у меня есть какие то другие варианты? Просто я не знаю другого способа что бы сравнить содержания.
Да. "sdiff" - это просто сокращённый вариант для "diff --side-by-side". При этом diff поддерживает множество других форматов, см. man diff
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 30.07.2010 18:39
К сожалению, ничего конкретного и удобного для работы с большим списком не было найдено. Приведите, пожалуйста, по возможности примеры.
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo
Сообщение
/dev/random » 30.07.2010 18:49
Выбирайте:
Shell
$ diff 1.txt 2.txt
1,2c1,2
< v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php
< g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif
---
> 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
> v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif
5c5
< 049346916619626250875b47e93fe533 ./forum/picturecomment.php
---
> g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
$ diff 1.txt 2.txt -u
--- 1.txt 2010-07-30 18:45:34.563684786 +0400
+++ 2.txt 2010-07-30 18:45:42.249720517 +0400
@@ -1,7 +1,7 @@
-v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php
-g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif
+7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
+v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif
b154b0bdd10546dce45df39db9107c12 ./forum/login.php
258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php
-049346916619626250875b47e93fe533 ./forum/picturecomment.php
+g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php
e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php
$ diff 1.txt 2.txt -c
*** 1.txt 2010-07-30 18:45:34.563684786 +0400
--- 2.txt 2010-07-30 18:45:42.249720517 +0400
***************
*** 1,7 ****
! v0a1ad3c358ee4a4415qf0ea19e4046f ./forum/group.php
! g9f11ed65387743aea011411ah1f3c5f ./forum/images/statusicon/thread_dot_hot_lock_new.gif
b154b0bdd10546dce45df39db9107c12 ./forum/login.php
258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php
! 049346916619626250875b47e93fe533 ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php
e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php
--- 1,7 ----
! 7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
! v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif
b154b0bdd10546dce45df39db9107c12 ./forum/login.php
258ae02dadf07728122110e7d4805086 ./forum/member_inlinemod.php
! g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
a1ec573c881714eb514b2a9253bb7d9b ./forum/report.php
e7f18694113c504d96f338610f7d74b4 ./forum/showpost.php
$ diff 1.txt 2.txt -e
5c
g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
.
1,2c
7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif
.
$ diff 1.txt 2.txt -n
d1 2
a2 2
7727bd29w0dab41dhb84f54a327bebb5 ./forum/group.php
v9f17ed67487119aea011013ab1f3b2a ./forum/images/statusicon/thread_dot_hot_lock_new.gif
d5 1
a5 1
g61ba212e6868f3d4b0t432435173c74 ./forum/picturecomment.php
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 30.07.2010 19:43
возможно, проще будет зайти не с конца, а с начала.
т.е., с какой целью вообще всё это сравнение двух текстовых файлов затевается? может быть, сравнивать нужно не эти два файла, а те самые showpost.php, login.php и т.д.?
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 30.07.2010 20:14
sash-kan писал(а): ↑ 30.07.2010 19:43
возможно, проще будет зайти не с конца, а с начала.
т.е., с какой целью вообще всё это сравнение двух текстовых файлов затевается? может быть, сравнивать нужно не эти два файла, а те самые showpost.php, login.php и т.д.?
Что бы выявить какие либо изменения в этих самых файлах.
Данные снимает md5sum, затем они проверяются с базой.
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 30.07.2010 20:41
если нужно выявить факт изменения, так используйте md5sum по назначению:
$ touch 1 2 3
$ md5sum * > ../sums
$ cat ../sums
d41d8cd98f00b204e9800998ecf8427e 1
d41d8cd98f00b204e9800998ecf8427e 2
d41d8cd98f00b204e9800998ecf8427e 3
$ echo test > 1
$ md5sum -c ../sums
1: FAILED
2: OK
3: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match
$
Grih65kop
Сообщения: 145
Сообщение
Grih65kop » 30.07.2010 21:02
sash-kan писал(а): ↑ 30.07.2010 20:41
если нужно выявить факт изменения, так используйте md5sum по назначению:
$ touch 1 2 3
$ md5sum * > ../sums
$ cat ../sums
d41d8cd98f00b204e9800998ecf8427e 1
d41d8cd98f00b204e9800998ecf8427e 2
d41d8cd98f00b204e9800998ecf8427e 3
$ echo test > 1
$ md5sum -c ../sums
1: FAILED
2: OK
3: OK
md5sum: WARNING: 1 of 3 computed checksums did NOT match
$
В такой случаи файл который появился после снятия первой суммы при проверку во второй раз останется не заметным т.к. отсутствует в списке.
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU
Сообщение
sash-kan » 30.07.2010 23:55
что мешает его внести в список?
p.s. собственно интересно, чем вас diff не устраивает? чем вас rsync --list-only не устраивает? чем вас, в конце концов, git status не устраивает? почему именно контрольные суммы (да ещё и столь долго вычислимые)?