Если ваша задача - просто убедиться, что последующие копии двух (или 1 + количество тем) каталогов всегда актуальны, задание cron
, которое синхронизирует их каждые n минут, может быть самым простым и надежным решением. cron
имеет поминутную гранулярность, хотя что-то вроде каждые пять минут вполне может быть достаточно для вашего случая использования. rsync
по своему замыслу не копирует файлы, которые уже обновлены, поэтому он должен быть достаточно быстрым для выполнения в нерабочем случае.
* * * * * bin/rsyncthemes
(Это один раз в минуту; в Linux вы можете сказать */5
в первом поле для запуска каждые 5 минут, но это не переносимо на все диалекты cron
.) ... где rsyncthemes
содержит что-то как
#!/bin/sh
# cron jobs always start in your home directory,
# but you want to put an absolute path here
# to run this in the directory where you want rsync to copy these files
cd somewhere
for dir in code/themes/one \
code/themes/other \
code/base
do
rsync -avh "$dir"/* ./
done
, где, очевидно, это необходимо пометить исполняемым (chmod a+x rsyncthemes
) и сохранить в каталоге, указанном в задании cron
(а именно bin
в вашем домашнем каталоге).
Если вы склонны к использованию entr
, чтобы избежать ненужного запуска rsync
, я думаю, вы хотите что-то вроде
for dir in code/themes/one \
code/themes/other \
code/base
do
while true; do
find "$dir"/src -name '*.html' -o -name '*.ts' -o -name '*.scss' |
entr -d rsync -avh "$dir"/* ./
done & # <-- run each loop as a background job
done
Более подробно, мы запускаем три цикла while true
в качестве фоновых заданий, по одному для каждого из каталогов, перечисленных в цикле for
. Они работают параллельно с вашей интерактивной оболочкой и прекратят работу, когда вы выйдете из системы (если вы отдельно не настроите их для работы с чем-то вроде nohup
). Оператор &
- это то, что запускает что-то в фоновом режиме, и помещая его после оператора done
цикла while
, он применяется ко всему циклу.
Полагаю, вам может понадобиться использовать entr -n
, чтобы задания выполнялись в фоновом режиме.
Подстановочный знак в команде rsync
расширяется оболочкой, поэтому вам может потребоваться изменить его, чтобы не использовать подстановочный знак, или вычислять подстановочный знак только после завершения find
, если вы ожидаете, что это возможно для новые файлы появляются в этих каталогах время от времени. (Цитируя всю команду rsync
и передавая ее с entr -s
, можно легко выполнить это, если я правильно читаю справочную страницу entr
.)