Потоковое сравнение содержимого в двух каталогах

Потоковое сравнение содержимого в двух каталогах

Как сделать потоковую передачу (одной командой или скриптом) задачей для:

  • сравните содержимое (файлы и папки) двух каталогов dir1 и dir2
  • если в каталоге dir1 появляются новые файлы, начать копировать их в dir2 и одновременно обрабатывать их обработчиком:

diff -> копировать -> выполнить some.sh

решение1

Выведите содержимое dir1 в file1.txt, используя следующую команду

ls -ltr | awk '{print $9}'  > /var/tmp/file1.txt

file1.txt содержит следующее содержимое

t1
1
l.sh
r.txt
l.py
l.txt
p.txt

Выведите содержимое dir2 в file2.txt, используя следующую команду

ls -ltr | awk '{print $9}' > /var/tmp/file2.txt
t1
1
l.sh
r.txt
l.py
l.txt

Теперь эта команда найдет содержимое, которого нет в file2.txt по сравнению с file1.txt, чтобы скопировать его в каталог 2.

awk 'NR==FNR {a[$1];next}!($1 in a) {print $1}' file2.txt file1.txt |
awk '{print "cp -rvfp" " " "directory1path”$1 " " "directory2path"}' |
sh

решение2

Сделать это можно двумя способами:

  1. Использование мягкой ссылки

    Используйте эту команду для получения еще одной копии исходного файла в папке назначения.

    ln -s  source destination
    

    но в этом случае после удаления исходного файла или каталога ссылка станет недействительной, и вы не сможете получить к нему доступ.

  2. Использование rsync

    rsync -avzh sourcepath destinationpath
    

    Эта команда автоматически синхронизирует источник и назначение. Запланируйте crontab на 1 минуту для этой команды, чтобы она постоянно проверяла и обновляла.

Связанный контент