{"id":1879,"date":"2022-10-06T08:35:03","date_gmt":"2022-10-06T08:35:03","guid":{"rendered":"https:\/\/www.dev-metal.ch\/?p=1879"},"modified":"2022-10-06T14:48:11","modified_gmt":"2022-10-06T14:48:11","slug":"bash-scripting-existieren-aktuelle-files-in-einem-ordner","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=1879","title":{"rendered":"Bash Scripting: Existieren aktuelle Files in einem Ordner?"},"content":{"rendered":"<p>Ich verwende seit einiger Zeit Shinobi als Video-Recorder f\u00fcr meine Kameras. Die Installation habe ich <a href=\"https:\/\/www.dev-metal.ch\/?p=1576\" target=\"_blank\" rel=\"noopener\">hier<\/a> beschreiben.<\/p>\n<h2>Problem<\/h2>\n<p>Nun kam es einmal vor, dass Shinobi die Aufnahmen ungeplant gestoppt hat. Damit ich dies schneller bemerke habe ich mir ein Bash-Script gezimmert.<\/p>\n<p>Anforderungen:<\/p>\n<ul>\n<li>Skript soll regelm\u00e4ssig \u00fcberpr\u00fcfen ob sich in den Video-Verzeichnissen aktuelle Aufnahmen befinden.<\/li>\n<li>Falls sich keine aktuellen Aufnahmen darin befinden, soll eine <a href=\"https:\/\/pushover.net\/\" target=\"_blank\" rel=\"noopener\">Pushover<\/a> Nachricht ausgel\u00f6st werden.<\/li>\n<\/ul>\n<h2>Umsetzung<\/h2>\n<p>Folgendes Script \u00fcberpr\u00fcft vordefinierte Verzeichnisse und sendet eine Pushover-Nachricht, falls sich in den Verzeichnissen keine aktuellen Files befinden.<\/p>\n<p>F\u00fcr das versenden der pushover Nachricht wird das Script von <a href=\"https:\/\/github.com\/akusei\/pushover-bash\" target=\"_blank\" rel=\"nofollow noopener\">https:\/\/github.com\/akusei\/pushover-bash<\/a> verwendet.<\/p>\n<pre>#!\/bin\/bash\r\n\r\n#***********************************************************************************************\r\n#**\r\n#** Dieses Script \u00fcberpr\u00fcft ob sich aktuelle Video-Files in den daf\u00fcr vorgesehenen Verzeichnissen\r\n#** befindet.\r\n#**\r\n#***********************************************************************************************\r\n\r\n#***********************\r\n# Variablen\r\n#***********************\r\nnotOlderThan=\"10\" # die Files d\u00fcrfen nicht \u00e4lter als diese Variable (in minuten) sein\r\nsourcepath=\"\/home\/xxx\/checkVideosAvailable\/\"\r\npaths=( \"${sourcepath}videos\" \"${sourcepath}videos2\" \"${sourcepath}videos3\") # Die zu \u00fcberpr\u00fcfenden Verzeichnisse (Array)\r\npushover_App_Key=\"xxxxx\" #Pushover API Key\r\npushover_User_Key=\"xxxxx\" #Pushover User Key\r\nout=$(mktemp \/tmp\/message.XXXXXXXX) #Temp-File zum Aufbereiten der Pushover-Nachricht\r\ntimestampLocation=\".\/timestamp\" #Pfad und Name zum timestamp File, welches f\u00fcr die \u00dcberpr\u00fcfung des alters gebraucht wird.\r\n\r\n\r\n#***********************\r\n# Logik\r\n#***********************\r\nfilesExists=true\r\n\r\n# Erstelle ein File \"timestamp\" mit einem Timestamp \"jetzt - $notOlderThan min\". \r\n# Dieses File wird anschliessend verwendet um \u00fcber den \"find\" Befehl das Alter der Files vergleichen zu k\u00f6nnen. \r\ndate --date=\"-$notOlderThan minutes\" +\"%Y%m%d%H%M\" | xargs touch $timestampLocation -mt\r\n\r\n#iteriere \u00fcber die paths und \u00fcberpr\u00fcfe ob sich darin Files befinden, welche j\u00fcnger als $notOlderThan bzw. das File $timestampLocation sind \r\nfor i in \"${paths[@]}\"\r\ndo\r\n#echo \"Testing $i\" &gt;&gt; \"$out\"\r\n# Suche Files, welche neuer als das erstellte timestamp-file sind.\r\nif test \"`find $i\/. -newer $timestampLocation -type f`\"\r\nthen\r\necho \"Aktuelle Video-Files existieren in $i\"\r\nelse\r\nfilesExists=false\r\necho \"Es existieren keine aktuellen Video-Files in \\n $i\"\r\nfi\r\ndone\r\n\r\nif [ \"$filesExists\" = false ] ; \r\nthen\r\necho \"Sende Pushover Nachricht\"\r\ncat \"$out\" | xargs -0 -I XX .\/pushover.sh -t $pushover_App_Key -u $pushover_User_Key -m XX\r\nfi\r\n\r\n# Entferne die temp Files\r\nrm \"$out\"\r\nrm $timestampLocation<\/pre>\n<h2>Installation auf <a href=\"https:\/\/www.dev-metal.ch\/?p=1659\" target=\"_blank\" rel=\"noopener\">HC4<\/a><\/h2>\n<p>Das obige bash-Script inkl. Pushover Bashscript in ein Verzeichnis schreiben (z.B. nach \/home\/xxxx\/checkVideosAvailable\/ )<\/p>\n<h3>cronjob<\/h3>\n<p>Das Script soll als cron-job jede Stunde laufen.<\/p>\n<pre>sudo -s\r\ncrontab -e\r\n-------------\r\n45 * * * * \/bin\/bash \/home\/xxx\/checkVideosAvailable\/checkVideosAvailable.sh &gt; \/dev\/null 2&gt;&amp;1<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Ich verwende seit einiger Zeit Shinobi als Video-Recorder f\u00fcr meine Kameras. Die Installation habe ich hier beschreiben. Problem Nun kam es einmal vor, dass Shinobi die Aufnahmen ungeplant gestoppt hat. Damit ich dies schneller bemerke habe ich mir ein Bash-Script gezimmert. Anforderungen: Skript soll regelm\u00e4ssig \u00fcberpr\u00fcfen ob sich in den Video-Verzeichnissen aktuelle Aufnahmen befinden. Falls [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-1879","post","type-post","status-publish","format-standard","hentry","category-techdocs"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1879"}],"version-history":[{"count":8,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1879\/revisions"}],"predecessor-version":[{"id":1887,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1879\/revisions\/1887"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}