User Tools

Site Tools


directory:run_a_command_upon_files_or_directories_changes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
directory:run_a_command_upon_files_or_directories_changes [2021/01/26 09:49] peterdirectory:run_a_command_upon_files_or_directories_changes [2021/01/26 10:53] (current) – removed peter
Line 1: Line 1:
-====== Directory - Run a Command Upon Files or Directories Changes ====== 
  
-Use either inotifywait or iwatch. 
- 
- 
----- 
- 
-===== Using inotifywait ===== 
- 
-==== Install inotify-tools ==== 
- 
-<code bash> 
-sudo apt install inotify-tools 
-</code> 
- 
----- 
- 
-==== Test inotifywait ==== 
- 
-In a shell enter: 
- 
-<code bash> 
-while true; do 
-  res=`inotifywait -r thedirtowatch/ --format %f`; 
-  echo "RESULT=$res"; 
-done 
-</code> 
- 
-returns: 
- 
-<code bash> 
-Setting up watches.  Beware: since -r was given, this may take a while! 
-Watches established. 
-</code> 
- 
-<WRAP info> 
-**NOTE:**  The **<nowiki>%f**</nowiki> refers to the filename in the event. 
- 
-See http://manpages.ubuntu.com/manpages/focal/man1/inotifywait.1.html for options. 
-</WRAP> 
- 
- 
----- 
- 
-In a 2nd shell, go to that directory being watched. 
- 
-<code bash> 
-touch test1 
-</code> 
- 
-**NOTE:**  Back on the 1st shell this should show you output: 
- 
-<code bash> 
-RESULT=test1 
-</code> 
- 
----- 
- 
-<WRAP info> 
-**NOTE:**  An additional **-e** option can be added to the inotifywait to only listen for certain events. 
- 
-For example: 
- 
-<code bash> 
-while true; do res=`inotifywait -e create, open, close, modify, moved_to, moved_from -r thedirtowatch/ --format '%e %f'` ; echo "RESULT=$res\n"; done 
-</code> 
- 
-The **<nowiki>--format</nowiki>** option is changed to include showing **%e** which is the actual event.  Obviously change as needed. 
- 
-See http://manpages.ubuntu.com/manpages/focal/man1/inotifywait.1.html for options. 
- 
-</WRAP> 
- 
----- 
- 
-===== More ===== 
- 
-<code bash> 
-inotifywait -m -e modify,create -r /yourpath && \ 
-chmod 644 file; && \ 
-chown blah:blah file; 
-</code> 
- 
-<WRAP info> 
-**NOTE:** 
- 
-  * **-m, --monitor**:  Instead of exiting after receiving a single event, execute indefinitely.  The default behavior is to exit after the first event occurs. 
-  * **-r, --recursive**:  Watch all sub-directories of any directories passed as arguments.   Watches will be set up recursively to an unlimited depth.    
-    * Symbolic  links  are  not  traversed.  Newly created sub-directories will also be watched. 
-</WRAP> 
- 
----- 
- 
-===== Using a BASH Script ===== 
- 
-<file bash after-change.sh> 
-#!/bin/bash 
-# 
-# Monitor the input directory and if any change occurs run the provided command: 
-# 
-# Usage: 
-#   after-change.sh /tmp ls -al %f 
- 
-if [ $# -lt 3 ]; then 
-  echo "Usage: $0 dir cmd " 
-  exit 1 
-fi 
- 
-which inotifywait 2>&1 >/dev/null 
- 
-if [ "$?" == "1" ]; then 
-  echo "ERROR:  inotifywait not installed." 
-  exit 1 
-fi 
- 
-dir=$1 
-shift 
-cmd=$1 
-shift 
-options=$* 
- 
-inotifywait -q -r -m $dir $options 
-eval $cmd 
-</file> 
- 
----- 
- 
-===== References ===== 
- 
-http://manpages.ubuntu.com/manpages/focal/man1/inotifywait.1.html 
directory/run_a_command_upon_files_or_directories_changes.1611654561.txt.gz · Last modified: 2021/01/26 09:49 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki