Möchte man eine Datei oder Ordner auf Änderungen überwachen und dann im Falle des eintretens eines Ereignisses einen Befehl oder Skript ausführen, so bieten sich hierfür Tools wie watchexec oder Watchman an. In diesem Beitrag geht es um das erstgenannte Tool.
Die Handhabe von watchexec ist denkbar einfach:
watchexec <Befehl>
Beim simplesten Aufruf wird der aktuelle Ordner auf Änderungen überwacht und sobald eine Eintritt der angegebene Befehl ausgeführt.
Gezielt kann man mit “-w” den bzw. die zu überwachenden Ordner angeben:
watchexec -w <Ordner> <Befehl>
“-w” kann mehrfach angegeben werden:
watchexec -w <Ordner 1> -w <Ordner 2> <Befehl>
Das Tool bietet eine Vielzahl ein Parametern:
watchexec 1.12.0 Execute commands when watched files change USAGE: watchexec [FLAGS] [OPTIONS]... FLAGS: -c, --clear Clear screen before executing command -h, --help Prints help information -k, --kill Send SIGKILL to child processes (deprecated, use -s SIGKILL instead) --no-default-ignore Skip auto-ignoring of commonly ignored globs --no-ignore Skip auto-loading of ignore files (.gitignore, .ignore, etc.) for filtering -n, --no-shell Do not wrap command in 'sh -c' resp. 'cmd.exe /C' --no-vcs-ignore Skip auto-loading of .gitignore files for filtering -p, --postpone Wait until first change to execute command -r, --restart Restart the process if it's still running -V, --version Prints version information -v, --verbose Print debugging messages to stderr -W, --watch-when-idle Ignore events while the process is still running OPTIONS: -d, --debounce Set the timeout between detected change and command execution, defaults to 500ms -e, --exts Comma-separated list of file extensions to watch (js,css,html) -f, --filter ... Ignore all modifications except those matching the pattern -i, --ignore ... Ignore modifications to paths matching the pattern -w, --watch ... Watch a specific directory --force-poll Force polling mode -s, --signal Send signal to process upon changes, e.g. SIGHUP ARGS: ... Command to execute
Wenn man nicht möchte, das direkt nach dem Start bereits einmal der angegebene Befehl ausgeführt wird, muss “-p” verwendet werden. Beendet bzw. abgebrochen wird mit “Strg + c”.
Nachdem die Parameter “/mon” und “/mot” von Robocopy nur bedingt dazu geeignet sind, um Änderung à la CDP in einen jeweiligen Ordner zu erfassen, bietet sich nun in der Kombi mit watchexec eine neue Gelegenheit.
Der Befehl zum Aufruf kann so aussehen:
watchexec -p -w C:\Source --force-poll 30000 cdp.cmd
“–force-poll” mit der Angabe von 30000 ms (30 s) ist in diesem Kontext notwendig, da sonst sowohl die geänderte Datei(en) als auch eine leere Kopie des Quellordners am Ziel erstellt wurden. Die Parameter muss man ggf. den eigenen Bedürfnissen anpassen. Anbei ein Beispiel-Skript für die Nutzung von Robocopy. Am Ziel-Ordner wird nach jeder Änderung ein Unterordner mit Zeitstempel erstellt, der die geänderte(n) Daten enthält.
@echo off rem Konfiguration set source=C:\Source set destination=C:\Backup rem Datum und Uhrzeit umwandeln set day=%date:~0,2% set month=%date:~3,2% set year=%date:~6,4% set hh=%time:~0,2% set mm=%time:~3,2% set ss=%time:~6,2% rem Robocopy robocopy "%source%" "%destination%\%year%-%month%-%day%_%hh%-%mm%-%ss%" /s /xj /r:0 /w:0 /m /xx
Die Ausgabe sieht bei einem Durchlauf so aus:
------------------------------------------------------------------------------- ROBOCOPY :: Robustes Dateikopieren für Windows ------------------------------------------------------------------------------- Gestartet: Sonntag, 1. März 2020 22:29:55 Quelle : C:\source\ Ziel : C:\Backup\2020-03-01_22-29-55\ Dateien : *.* Optionen: *.* /S /DCOPY:DA /COPY:DAT /XX /XJ /M /R:0 /W:0 ------------------------------------------------------------------------------ Neues Verz. 1 C:\source\test-ordner5\ 100% Neue Datei 1 test-file5.txt ------------------------------------------------------------------------------ Insgesamt KopiertÜbersprungenKeine Übereinstimmung FEHLER Extras Verzeich.: 8 8 0 0 0 0 Dateien: 8 1 7 0 0 0 Bytes: 280 1 279 0 0 0 Zeiten: 0:00:00 0:00:00 0:00:00 0:00:00 Geschwindigkeit: 500 Bytes/Sek. Geschwindigkeit: 0.028 Megabytes/Min. Beendet: Sonntag, 1. März 2020 22:29:55
Im Ziel-Ordner sieht es so aus:
28.02.2020 23:14 <DIR> 2020-02-29_12-08-09 28.02.2020 23:14 <DIR> 2020-02-29_12-08-35 28.02.2020 23:14 <DIR> 2020-02-29_12-08-42 28.02.2020 23:14 <DIR> 2020-02-29_12-08-44 01.03.2020 22:15 <DIR> 2020-03-01_22-15-39
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Schreibe einen Kommentar