]>
zdv2.bktei.com Git - BK-2020-03.git/blob - unitproc/bkhashwatch 
   3  # Date: 2020-04-08T23:37Z    5  # Description: A bash script that hashes files immediately after they    6  # are modified. Watches for 1 hour then exits.    8  # Dependencies: inotifywait, timeout, awk, b2sum, date   10  echoerr
() {  echo  "$@"  1 >& 2 ; }   12  DIR_TO_WATCH
= "/home/baltakatei/Sync"   13  DIR_LOG
= "/home/baltakatei/Sync/kodawkuori-07/2020/archive-PERS/logs/files"   15  DIR_LOG_PATH
= $DIR_LOG "/" "$(date +%Y%m%d)" ".." "$(hostname)" "_" " $DIGEST_ALGO " "_filewrites.log"  # The .log extension is important for inotifywait "--exclude" option.   16  TIMEOUT
= "1h"  # Limit inotifywait process to 1 hour.   17  MIN_FILE_SIZE
= 1  # smallest file size to log (in bytes)   19  if  !  command -v  " $DIGEST_ALGO "  1 >/ dev
/ null 
2 >/ dev
/ null
;  then  echoerr 
"ERROR:  $0  could not find command  $DIGEST_ALGO  ." ;  exit  1 ;  fi   21  if  [ !  -d  " $DIR_TO_WATCH "  ];  then  echoerr 
"ERROR:  $0  could not parse  $DIR_TO_WATCH  as directory." ;  exit  1 ;  fi   23  timeout 
$TIMEOUT  inotifywait 
-m -e  close_write 
-e  moved_to 
--exclude  ".tmp$"  --exclude  ".log$"  -r --format  "%w%f"  " $DIR_TO_WATCH "  |
  25          # note: make sure to exclude the $DIR_LOG_PATH via ".log$" (or equivalent means) to avoid endless logging of log writes.   26          EVENT_DATE
= "$(date +%Y%m%dT%H%M%S.%N%z )"   27          TARGET_FILEPATH
= "$(echo -n  $line  )"   28          TARGET_FILENAME
= "$(basename " $TARGET_FILEPATH " )"   29          TARGET_FILESIZE
= "$(du -b " $TARGET_FILEPATH " | awk '{print  $1 }' )"   30          TARGET_FILEMTIME
= "$(date -r " $TARGET_FILEPATH " +%Y%m%dT%H%M%S.%N%z)"   31          TARGET_DIGEST
= "$(cat " $TARGET_FILEPATH " |  $DIGEST_ALGO  | awk '{print  $1 }' )"   32          EVENT_LOG_ENTRY
= " $EVENT_DATE " , " $TARGET_FILEMTIME " , " $DIGEST_ALGO " , " $TARGET_DIGEST " , " $TARGET_FILESIZE " , " $TARGET_FILEPATH "   33          echo  " $EVENT_LOG_ENTRY "  >> / dev
/ random 
# Mix written file's digest with system PRNG.   34          if  [  -d  " $DIR_LOG "  ] && [  $
((  " $TARGET_FILESIZE "  -  " $MIN_FILE_SIZE "  ))  -ge  0  ];  then   35              if  [ !  -f  " $DIR_LOG_PATH "  ];  then   36                  echo  "EVENT_DATE,TARGET_FILEMTIME,DIGEST_ALGO,TARGET_DIGEST,TARGET_FILESIZE,TARGET_FILEPATH"  >>  " $DIR_LOG_PATH "  # print field names in first row   38              echo  " $EVENT_LOG_ENTRY "  >>  " $DIR_LOG_PATH " ;  # Log written file's digest if TARGET_FILESIZE greater or equal to MIN_FILE_SIZE (in bytes).   39              #echo "$EVENT_LOG_ENTRY" >> /tmp/bkhashwatch.log #debug   42  echo  "Timeout of  $TIMEOUT  elapsed. Exiting."