Відповіді:
Є 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
(принаймні в ОС це було так).
Почніть / перезавантажте / перезавантажте демон і отримайте задоволення.