Zawsze, gdy coś dodam ~/config/
, Chciałbym, żeby zostało to połączone ~
. Nie chcę uciekać ln -s
każdego razu.
Zawsze, gdy coś dodam ~/config/
, Chciałbym, żeby zostało to połączone ~
. Nie chcę uciekać ln -s
każdego razu.
Odpowiedzi:
Jest iwatch
narzędzie, może to zrobić. W moim Ubuntu zainstalowałem iwatch
pakiet, aby go zdobyć. Może być używany jako demon lub narzędzie wiersza poleceń.
Nie mogę zagwarantować, że poniższe rozwiązania są niezawodne i dobrze napisane. Traktuj je jako dowód koncepcji.
W moich testach nie udało mi się zrobić pojedynczej instancji iwatch
sama wykonuje jedną akcję, gdy plik jest tworzony, ale inna akcja, gdy jest usuwana. Może możesz to jakoś zrobić. Postanowiłem zamiast tego przeanalizować jego wynik, a następnie zdecydować ( case
oświadczenie) co robić. Uruchom to:
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
Bawić się touch
, mkdir
, mv
, rm
itp. w ~/config
w innej konsoli, aby przetestować rozwiązanie.
Uwagi:
mv
jest również objęty. foo bar
lub a"b
. ~/
zajmując nazwę, żadne dowiązanie symboliczne nie zostanie utworzone, aby je zastąpić - brak utraty danych. test -L …
. The iwatch
demon odczytuje swój plik konfiguracyjny, możesz powiedzieć mu, co robić. Nie tylko miałem problem z zdefiniowaniem dwóch różnych akcji, ale także z unikaniem niektórych znaków w pliku konfiguracyjnym. Najłatwiejszym rozwiązaniem było wywołanie skryptu bash, aby wykonać zadanie.
Zanim zaczniesz, zauważ:
USERNAME
musi zostać zmodyfikowany w pliku konfiguracyjnym i skrypcie. To jest fragment kodu, który należy wkleić do pliku konfiguracyjnego ( /etc/iwatch/iwatch.xml
w moim systemie operacyjnym) tuż przed </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>
(Możesz usunąć domyślne watchlist
sekcja, jeśli istnieje.)
Ścieżka do skryptu to /home/USERNAME/bin/link_config
. To szybki i brudny skrypt:
#!/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
Myślę, że jeśli pominiesz gwiazdki ( *
) i zostawcie gołą IN_CREATE
itd. wtedy skrypt zignoruje katalogi utworzone w /home/USERNAME/config
; może to jest to, co lubisz bardziej. Dotyczy to również wersji wiersza poleceń.
Ustaw skrypt jako wykonywalny:
chmod u+x /home/USERNAME/bin/link_config
Ustaw inne uprawnienia, jak potrzebujesz. Demon uruchomi go jako root
w każdym razie (przynajmniej w moim systemie operacyjnym tak było).
Uruchom / uruchom ponownie / ponownie załaduj demona i baw się dobrze.