
Как сделать потоковую передачу (одной командой или скриптом) задачей для:
- сравните содержимое (файлы и папки) двух каталогов 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
Сделать это можно двумя способами:
Использование мягкой ссылки
Используйте эту команду для получения еще одной копии исходного файла в папке назначения.
ln -s source destination
но в этом случае после удаления исходного файла или каталога ссылка станет недействительной, и вы не сможете получить к нему доступ.
Использование rsync
rsync -avzh sourcepath destinationpath
Эта команда автоматически синхронизирует источник и назначение. Запланируйте crontab на 1 минуту для этой команды, чтобы она постоянно проверяла и обновляла.