LINUX.ORG.RU

сравнение 2-х каталогов

 ,


0

3

Есть 2 каталога. Первый - оригинальные данные, второй - измененные данные (overlayfs).

Чем можно получить список изменений ?

Задача содержимое первого каталога превратить во второй.

Ковырять содержимое верхнего уровня overlayfs нет смысла, т.к. они используют атрибуты.

rdiff-backup для этой цели не подходит.

★★★★★

Ответ на: комментарий от vel

Что это за странный дистрибутив?

apt-cache depends meld
meld
  Зависит: <python3:any>
    python3
 |Зависит: dconf-gsettings-backend
  Зависит: <gsettings-backend>
    dconf-gsettings-backend
    gconf-gsettings-backend
  Зависит: libgtk-3-0
  Зависит: python3-gi
  Зависит: python3-gi-cairo
  Зависит: libgtksourceview-3.0-1
  Зависит: gir1.2-gtksource-3.0
  Зависит: python3-cairo
  Зависит: libcanberra-gtk3-module
  Зависит: patch
  Рекомендует: yelp
PRN ()
Ответ на: комментарий от vel

оно изменение ctime/mtime,маску прав, uid, gid умеет отслеживать?

Нет. Тебя не понять - толи нужны «атрибуты», толи нет.

Можно смотреть в сторону rsync --dry-run <и другие опции> чтобы посмотреть список, что он будет делать.

anonymous ()
Ответ на: комментарий от anonymous

Нельзя копировать из второго каталога в первый пока смонтирована overlayfs, а если ее отмонтировать, то не определить изменения :)

Мне нужно изменения сделанные в верхнем слое перенести в нижний.

На гитхабе есть такая утиль, но она не дописана. Ковырять ее дальше нет смысла.

Если сделать утиль, которая будет определять разницу, то можно будет объединять слои независимо от FS (aufs,overlayfs)

vel ★★★★★ ()
Ответ на: комментарий от beastie

Первое - неработоспособно. С нее я начал. там diff работает, а merge уже нет.

Второе - shell script (производительность). И оно специфическое для aufs.

Хочется более универсального решения.

vel ★★★★★ ()

А почему вы не попробуете rsync c опцией -n или —dry-run (тестовый прогон без фактической синхронизации)? Иногда из-за удобства даже копирую только ей.

Примеры:
https://vds-admin.ru/unix-toolbox/rsync
https://www.alexeykopytko.com/2017/rsync-howto/
https://itproffi.ru/utilita-rsync-sinhronizatsiya-fajlov-v-linux/

hikikomori ★★★ ()
Ответ на: комментарий от vel

Я пользуюсь таким скриптом, откуда-то из инета:

rsync -rin --ignore-existing  $L_DIR/ $R_DIR/ | sed -e 's/^[^ ]* /L /'     
rsync -rin --ignore-existing $R_DIR/ $L_DIR/ | sed -e 's/^[^ ]* /R /'
rsync -rin --existing $L_DIR/ $R_DIR/ | sed -e 's/^/X /'
три запуска rsync, каждый даёт свой список. Сначала уникальные для L_DIR, потом уникальные для R_DIR, потом существюущие там и там файлы, но отличающиеся. Вроде для вашей задачи списки подходят — на копирование, на удаление, на изучение различий...

Но c переводами строк и пр. в именах файлов будет сложно.

mky ★★★★★ ()

Сделать свой велосипед оказалось проще.

Самое сложное было создать сценарии всех возможных изменений данных.

Как ни странно, но c aufs оно тоже заработало.

Пока результат сравнения сделан в виде скрипта, запустив который все изменения применяются к нижнему уровню.

Если реализовать самому копирование файла (не каталога и не симлинка), chmod, chown, chgrp и 'touch -r', то программа станет полностью самодостаточной.

Будет время - выложу на гитхаб.

vel ★★★★★ ()

еще один вариант использовать каменный топор по имени tar.
в него вкрутили инкрементальные архивы, не докрутили до конца, но вродеб работает.

принцип примерно таков:
в начале создаешь файл с образом состояний файлов, архив не нужен поэтому сливаешь его в унитаз
tar -c -g /path/to/tar_image /path/to/lower/dir > /dev/null
потом пользуясь имаджем делаешь дополнящий архив
tar -c -g /path/to/tar_image /path/to/assembled/dir > /path/archive_incremental.tar
в архиве будут лежать отличающиеся файлы (сжатие по вкусу стандартными опциями).
изменения файлов допишутся в /path/to/tar_image. по ману есть даже опция поддержки уровней вложенности имаджей, но это не доделано.

pfg ★★★★★ ()
Ответ на: комментарий от pfg

Про «tar -g» я знаю, но там есть косяк с одинаковыми inode каталогов (сталкивался до версии 1.30). Ситуация, когда удаляется каталог, потом создается с тем же именем и той же inode (да, ситуция редкая) tar отрабатывает некорректно.

Минус решения с таром - это дублирование измененных файлов, которые и так есть в rw-layer aufs/overlayfs.

vel ★★★★★ ()
Ответ на: комментарий от anonymous

Где же ты раньше был! Да, mtree (из порта) выдает подходящий результат.

Жаль, что оно не умеет отличать файлы с разным содержимым

$ md5sum ofs/dir1/dir1_file1 ofs-ro/dir1/dir1_file1
c8d502494a213e6c2313353ad37435b9  ofs/dir1/dir1_file1
7c50ad9e1800dd63e73d9d38ef274167  ofs-ro/dir1/dir1_file1
$ md5sum ofs/dir1/dir1_file2 ofs-ro/dir1/dir1_file2
edd390c15ceaef3a700993be02039e06  ofs/dir1/dir1_file2
edd390c15ceaef3a700993be02039e06  ofs-ro/dir1/dir1_file2

dir1/dir1_file1 changed
        modification time expected Sun Feb 29 16:00:00 2004 found Thu Dec 24 23:53:30 2020
dir1/dir1_file2 changed
        modification time expected Mon Dec 29 12:00:00 2008 found Sun Dec 20 11:12:13 2020

vel ★★★★★ ()