Відповіді:
Є iwatchутиліта, вона може це зробити. У моїй Ubuntu я встановив iwatchпакет, щоб отримати його. Він може використовуватися як демон або інструмент командного рядка.
Я не можу гарантувати, що нижченаведені рішення є надійними та добре написаними. Розглянемо їх як доказ концепції.
У моїх тестах мені не вдалося зробити один екземпляр iwatchсебе виконати одну дію при створенні файлу, але іншу дію при його видаленні. Можливо, ви можете це зробити. Я вирішив розібрати його вихід, а потім вирішити ( caseзаяву), що робити. Запустіть це:
cd ~/config
iwatch -e create,moved_to,delete,moved_from -c "printf '%s %s\n' %e %f" ./ |
while read -r e f ; do
f="$(basename "$f")"
case $e in
*IN_CREATE|*IN_MOVED_TO)
ln -s "config/$f" "../$f"
;;
*IN_DELETE|*IN_MOVED_FROM)
test -L "../$f" && rm "../$f"
esac
done
Грати з touch, mkdir, mv, і rmт.д. , в ~/configв інший консолі , щоб перевірити рішення.
Примітки:
mvтакож охоплюється.foo barабо a"b.~/займає ім'я, то ніякої символічної посилання не буде створено, щоб перезаписати її - немає втрати даних.test -L ….iwatchДемон читає свій конфігураційний файл, ви можете сказати йому , що робити. Мало того, що у мене виникла проблема з визначенням двох різних дій, але також і вилучення деяких символів у конфігураційному файлі. Найпростішим рішенням було викликати bash-скрипт для виконання завдання.
Перед початком роботи зверніть увагу:
USERNAMEпотрібно змінити файл конфігурації та скрипт.Це фрагмент, який потрібно вставити у конфігураційний файл ( /etc/iwatch/iwatch.xmlу моїй ОС) перед </config>:
<watchlist>
<title>symlinks</title>
<contactpoint email="USERNAME@localhost" name="USERNAME"/>
<path type="single" events="create,moved_to,delete,moved_from" alert="off" exec="/home/USERNAME/bin/link_config %e %f">/home/USERNAME/config</path>
</watchlist>
(Ви можете видалити watchlistрозділ за умовчанням , якщо такий є.)
Шлях до сценарію є /home/USERNAME/bin/link_config. Це швидкий і брудний сценарій:
#!/usr/bin/env bash
p="/home/USERNAME"
e="$1"
f="$(basename "$2")"
case "$e" in
*IN_CREATE|*IN_MOVED_TO)
ln -s "config/$f" "$p/$f"
;;
*IN_DELETE|*IN_MOVED_FROM)
[ -L "$p/$f" ] && rm "$p/$f"
esac
Я думаю, якщо ви опустите зірочки ( *) і залишите голі IN_CREATEі т.д., то сценарій ігноруватиме каталоги, створені в /home/USERNAME/config; можливо, це те, що вам більше подобається. Це також стосується версії командного рядка.
Зробити скрипт виконуваним:
chmod u+x /home/USERNAME/bin/link_config
Встановіть інші дозволи, як вам потрібно. Демон запустить його як і раніше root(принаймні в ОС це було так).
Почніть / перезавантажте / перезавантажте демон і отримайте задоволення.