LinuxForum.Fans
Тема

простенький скрипт для сравнения файлов

Автор: ELE_TRO-NI_ 11 сообщений 4663 просмотров
#325715
text
#!/bin/sh

MOUNT="/media/DISK_A1/system"

export PATH=$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin export LD_LIBRARY_PATH=$MOUNT/lib:$MOUNT/usr/lib:/lib:/usr/lib

start() { dd if=/dev/mtdblock/0 of=/media/DISK_A1/mtd0.bin [color=red]diff /media/DISK_A1/mtd0.bin /media/DISK_A1/mtd0 если не совпадает [/color] dd if=/media/DISK_A1/mtd0 of=/dev/mtdblock/0 }

case "$1" in start) start ;; stop) ;; restart) start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac

как можно сделать так чтобы выполнилась следующая команда если файлы не совпадают?

#325720

Ох и кривой же скриптик. Это вам учебное задание такое что ли?

#325770

Читаем man diff на предмет кодов возврата, откуда узнаём, что при несовпадении код возврата 1.
Читаем man bash на предмет условных операторов и способов проверки условий, а равно на предмет перенаправления вывода вникуда.
Применяем прочитанное на практике.

#325792

а вот интересный вопрос:
как сделать, чтобы diff не искал все различия до победного конца, а вылетал при первом же найденном различии?

#325808
"Fat-Zer" написал:
как сделать, чтобы diff не искал все различия до победного конца, а вылетал при первом же найденном различии?

Как я понял, проблема в обработке больших файлов?
Ключик у diff я не нашёл... Могу предложить такой велосипед :)

text

#!/usr/bin/env python
#_*_ coding: utf-8 _*_

from itertools import izip

with open('file1.txt', 'r') as f1, open('file2.txt', 'r') as f2: for line1, line2 in izip(f1, f2): if line1 != line2: print ("***%s\n***%s" %(line1, line2)) break

#325818

сам скрипт

text
#!/bin/sh
dd if=/dev/mtdblock/0 of=/var/mtd0
diff /var/mtd0 /media/DISK_A1/mtd0 >/dev/null
 if [ "$?" = "0" ]; then
    exit
 else
    dd if=/media/DISK_A1/mtd0 of=/dev/mtdblock/0
    logger "Flashing U-boot"
    date >> /media/DISK_A1/loguboot.txt
    fi
exit

проблема

text

/media/DISK_A1/system/etc # sh diffuboot
384+0 records in
384+0 records out
: Permission deniedcannot create /dev/null
diffuboot: line 11: syntax error: end of file unexpected (expecting "then")
#325856
text
cmp --help

не тоже самое ли?

#326009
text
#!/bin/sh

MOUNT="/media/DISK_A1/system"

export PATH=$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin export LD_LIBRARY_PATH=$MOUNT/lib:$MOUNT/usr/lib:/lib:/usr/lib

start() { dd if=/dev/mtdblock/0 of=/var/mtd0 diff /var/mtd0 /media/DISK_A1/mtd0 if [ "$?" = "0" ]; then logger "All OK" else dd if=/media/DISK_A1/mtd0 of=/dev/mtdblock/0 logger "Error" date >> /media/DISK_A1/error.txt fi }

case "$1" in start) start ;; stop) ;; restart) start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac

не пойму в чём дело. Роутер ругается

text
/media/DISK_A1/system/etc/init.d # ./S91diffuboot
-ash: ./S91diffuboot: not found
#326010
"-=Serj=-⇓" написал:
Могу предложить такой велосипед

уйди со своим питоном отсюда =)

"Macumazan⇓" написал:
cmp --help
не тоже самое ли?

спасибо... и как я только мог в своё время её проглядеть о_О

"ELE©TRO-NI©⇓" написал:
: Permission deniedcannot create /dev/null

странно это.... что за линукс/девайс?

можно использовать вместо него /dev/zero, если есть....

всегда(почти всегда) можно создать: mknod /dev/null с 1 3
если /dev на реальной ФС, то останется там навсегда (или до перепрошивки, если дело на роутере), если /dev временный, то до перезагрузки...

"ELE©TRO-NI©⇓" написал:
dd if=/dev/mtdblock/0 of=/var/mtd0
diff /var/mtd0 /media/DISK_A1/mtd0 >/dev/null
if [ "$?" = "0" ]; then

можно так: if ! diff /var/mtd0 /media/DISK_A1/mtd0 >/dev/null; then; then <бла-бла-бла>; fi
и даже без dd: diff /dev/mtdblock/0 /media/DISK_A1/mtd0 >/dev/null
и вместо diff'а лучше cmp применять, раз уж о нём упомянули... + с ключом -s можно отказаться от /dev/null

"ELE©TRO-NI©⇓" написал:
не пойму в чём дело. Роутер ругается

chmod +x забыл небось...
так и думал, что речь о каком-то ущербном роутере...

#326015
Macumazan написал:
text
cmp --help

не тоже самое ли?

Она хоть и побайтово сравнивает, но ведь всё-равно сравнивает полностью, нет?

"Fat-Zer" написал:
уйди со своим питоном отсюда =)

Всё-всё, улетучиваюсь :D

#326019
"-=Serj=-⇓" написал:
Она хоть и побайтово сравнивает, но ведь всё-равно сравнивает полностью, нет?

нет... до первого различия...

Войдите или зарегистрируйтесь, чтобы ответить.