DSIW

Alles was interessant ist... (Linux, Programmierung, Datenschutz, Medien, uvm.)

Ordner auf Veränderung prüfen

| Comments

Zur Übersichtlichkeit meiner Skripte benutze ich Unterordner in ~/bin. Diese heißen zum Beispiel sys, sync, media, latex. Nun habe ich mir ein Skript geschrieben, das mir alle Skripte in den Unterordnern nach ~/bin verlinkt:

refresh-ln.sh
1
2
3
find $HOME/bin -maxdepth 1 -type l -delete
find $HOME/bin -mindepth 2 -type f -executable ! -iname "\*~" -exec ln -s "{}" $HOME/bin/ ;
find $HOME/bin -maxdepth 1 -type f -iname "\*~" -exec chmod -x "{}" ;

Das Skript arbeitet folgendermaßen:

  1. Alle symbolischen Links werden entfernt.
  2. Such nach Dateien die das executable-Attribut tragen, werden symbolisch verlinkt.
  3. Alle Dateien, die mit ~ enden, werden unausführbar gemacht, da es Backups sind.

Bei jeder Änderung, die ich in dem Ordner vornahm, musste ich refresh-ln.sh ausführen. Dabei geht das auch automatisch. Dazu benötigt man das Programm inotify. Dies wird durch den Befehl

1
sudo apt-get install inotify

oder

1
sudo aptitude install inotify

installiert. Das Skript checkbin.sh benutzt dieses.

checkbin.sh
1
2
3
4
#!/bin/bash
while true;
        do inotifywait -e modify -e attrib -e move -e create -e delete -q -r ~/bin/ > /dev/null && ~/bin/refresh-ln.sh;
done

Das Skript wartet auf Veränderungen (veränderte, verschobene, erstellte, gelöschte Dateien) in dem Ordner ~/bin und den Unterordnern und führt danach das Skript refresh-ln.sh aus. Das Skript überprüft nicht alle paar Millisekunden, ob das Verzeichnis verändert wurde, sondern es bekommt eine Meldung direkt vom Kernel. Das heißt, dass das Programm ressourcenschonend arbeitet.

Außerdem habe ich das Programm bei den Startprogrammen hinzugefügt, sodass das Skript checkbin.sh bei jedem Start des Computers ausgeführt wird. Dazu öffnet man Einstellungen -> Startprogramme und klickt auf "hinzufügen". Dort ist dann der Name, der Pfad zum Skript und ein optionaler Kommentar anzugeben.

Weitere Informationen:

Comments