syxoi
@syxoi

Скрипт (или программа) для сравнения данных в двух каталогах?

Всем привет!
Имеется куча файлов, которые упаковываются в архив на одной машине, и передаются на другую, на ней распаковываются, но если посмотреть исходные и уже распакованные файлы, то размер папок (du -s folder) отличаются! Поэтому, решил попробовал написать сговнокодить следующий скрипт:
#!/bin/bash
DIR1=New
DIR2=New1
CAC="sha512sum"
IFS=$'\n' array0=( $(find "$DIR1" -type f ) )
IFS=$'\n' array1=( $(find "$DIR2" -type f) )
#echo ${array0[@]}
for rec0 in ${array0[@]}; do
#echo `$CAC $rec0`
IFS=$'\n' c0=( $($CAC $rec0) )
#echo ${c0[@]}
done
for rec1 in ${array1[@]}; do
IFS=$'\n' c1=( $($CAC $rec1) )
#echo ${c1[@]}
done
#for rec2 
#if [[${c0[@]} == ${c1[@]}]]; then
#echo 'su';
#else
#echo 'e';
#fi
#for t in ${c0[@]; do
#for b in ${c1[@]; do
#if [[ $t==$b ]]; then
#echo 'right'
#else
#echo 'left'
#fi

скрипт читает данные в папках, заданных в переменных DIR1 и DIR2, создает их контрольную сумму и справнивает эти контрольные суммы, если кол-во файлов отличается, или различаются контрольные суммы, то бьем тревогу. Но до ума я не смог довести этот скрипт. Подскажите какой-нибудь безкостыльный метод для этой задачи))
  • Вопрос задан
  • 1490 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
DU показывает не размер файлов и папок, а сколько они занимают на диске.
Например, если на втором диске у вас размер блока больше, то du всегда будет показывать больше.

В вашем случае, лучше синхронизируйте все по rsync с компрессией - надежнее. И вообще готовых решений по синхронизации двух каталогов, которые уже позаботились о всех детских болезнях, типа имен файлов с опасными символами, и другими штуками - множество.
Можно и одностороннюю синхронизацию сделать.

Или упростите скрипт, например до такого
find DIR1/* -exec md5sum {} \; > file1.lst
find DIR2/* -exec md5sum {} \; > file2lst
diff file1.lst file2.lst
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Бескостыльный метод сравнить содержимое двух каталогов -- выполнить
find -type f -print0 | xargs -0 sha1sum | sort > result
в этих каталогах, а потом сравнить файлы result, например командой diff.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
rsync ?
Ответ написан
Комментировать
kashamalasha
@kashamalasha
diff dir1 dir2 нельзя использовать?
Ответ написан
sim3x
@sim3x
Если не diff/rsynk то git
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы