Ausführen eines bash-Skript bei der Erstellung der Datei
Ich bin auf der Suche zu schreiben, ein kleines bash-script an, wenn es gestartet wird, sehen Sie ein Verzeichnis für alle neu erstellten Dateien. Wenn eine neue Datei angezeigt wird, ich will seine Anwesenheit auslösen, ein zweites Skript zu laufen.
Ich sehe das verwendet wird zum auslösen der Komprimierung vor kurzem digitalisierten Videos, und fügen Sie es ein Protokoll des aufgenommenen Filmmaterials.
Derzeit mein code sieht wie folgt aus:
#!/bin/sh
##VIDSTAT is a global variable coming from a parent script.
##proj is the ingestion directory coming from a parent script
proj=$1
dir="/home/$USER/data/movies/$proj"
dirlist=$(ls $dir)
while { $VIDSTAT -eq 1 }:
do
for mov in $dirlist
do
if [ "$(( $(date +"%s") - $(stat -c "%Y" $mov) ))" -lt "5" ]
then
~/bin/compressNlog.sh $mov
fi
done
done
Gibt es ein einfacher/sauberer/weniger Speicher-intensive Art und Weise, dies zu tun?
BEARBEITEN ich werde mich ändern, die Einnahme-Verzeichnis pro-capture-session. Ich habe den code entsprechend angepasst
- Seien Sie vorsichtig. Das Skript kann ausgeführt werden, bevor die Anwendung fertig ist, schreiben Sie die Datei, und es komprimiert eine unvollständige Datei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie etwa incron? Es auslösenden Kommandos Auf Datei - /Directory-Änderungen.
Beispiel:
Wo
<path>
kann ein Verzeichnis (also das Verzeichnis und/oder Dateien direkt in das Verzeichnis (nicht die Dateien in Unterverzeichnisse von diesem Verzeichnis!) beobachtet werden) oder eine Datei.<mask>
kann eine der folgenden sein:<command>
ist der Befehl, der ausgeführt werden soll wenn der event Auftritt. Die folgenden wildards kann verwendet werden innerhalb der Kommando-Spezifikation:Wenn du dir ein Verzeichnis, dann $@ enthält die Verzeichnis-Pfad und $# die Datei, die das Ereignis ausgelöst hat. Wenn Sie sehen eine Datei, dann $@ enthält den vollständigen Pfad zu der Datei und $# ist leer.
Beispiel:
Start Daemon:
Bearbeiten
incrontab
DateiTesten
Ergebnis:
Hinweise: In
Ubuntu
müssen Sie Sie aktivieren inotify beim Booten. Bitte fügen Sie die folgende Zeile im Grub-Menü.lst-Datei:env DISPLAY=:0 XAUTHORITY=/home/brian/.Xauthority _command_
. vielen Dank nochmal für die Hilfe @satishVerwenden iwatch. Nein, wirklich. Es werde sich um all die details zu machen, ein daemon, läuft auf Start, überwachen und protokollieren, und so weiter und so weiter. Alles, was Sie tun müssen, ist, legen Sie die Optionen fest, und haben Ihre bash-Skript behandeln die details der tatsächlich etwas zu tun mit der Datei.
inotify
, so dass es braucht mehr Ressourcen.Können Sie dies mit der magischen
inotify
tool :Diese Methode den großen Vorteil, zu vermeiden polling alle N Sekunden.
http://en.wikipedia.org/wiki/Inotify
Sehen inotify doc