| 1 | #!/bin/bash
|
| 2 | # My use case:
|
| 3 | # syncthing synchronizes ALL changes in DCIM directory on my android to PC.
|
| 4 | # I wanted files to be copied somewhere else on my PC to stay forever, so I
|
| 5 | # could sort them later and safely free some space on mobile without loss.
|
| 6 | # Also I wish to have some stupid log with history of such events.
|
| 7 |
|
| 8 | # inotify-tools package must be installed!
|
| 9 |
|
| 10 | # CHANGE THIS PARAMETERS to ones you needed
|
| 11 | dir_src="$HOME/Syncthing/Mobile/Camera"
|
| 12 | dir_dest="$HOME/some/safe/place"
|
| 13 | dir_logs="$HOME/inotifywait-cp-logs"
|
| 14 | regexp="[0-9]{8}_[0-9]{6}.*\.(jpg|mp4|gif)"
|
| 15 |
|
| 16 | print() {
|
| 17 | echo -e "[`date '+%H:%M:%S'`] $*" \
|
| 18 | | tee -a "$dir_logs/`date '+%Y%m%d'`.log"
|
| 19 | }
|
| 20 |
|
| 21 | copy () {
|
| 22 | mkdir -p "$dir_src" "$dir_dest" "$dir_logs"
|
| 23 | if [ -f "$dir_dest/$1" ]; then
|
| 24 | print "SKIPPED:\t$dir_dest/$1"
|
| 25 | else
|
| 26 | cp "$dir_src/$1" "$dir_dest/$1"
|
| 27 | print "COPIED:\t$dir_src/$1 => $dir_dest/$1"
|
| 28 | fi
|
| 29 | }
|
| 30 |
|
| 31 | mkdir -p "$dir_src" "$dir_dest" "$dir_logs"
|
| 32 |
|
| 33 | print "START\t========================="
|
| 34 |
|
| 35 | # First, try to backup files synced since last exec of this script
|
| 36 | ls -1 "$dir_src" \
|
| 37 | | grep -E "^$regexp$" \
|
| 38 | | while read filename; do copy "$filename"; done
|
| 39 |
|
| 40 | # Next, run inotifywait against source directory with args:
|
| 41 | # --quiet -- print less (only print events)
|
| 42 | # --monitor -- don't stop after first event (like infinite loop)
|
| 43 | # --event -- first syncthing creates hidden file to write data into
|
| 44 | # then renames it according to source file name, so here
|
| 45 | # we listen to MOVED_TO event to catch final filename
|
| 46 | # --format %f -- print only filename
|
| 47 | # --include -- filename regexp to catch event from, ensure your $regexp
|
| 48 | # is correct or remove line 56 to catch synced ALL files
|
| 49 |
|
| 50 | inotifywait \
|
| 51 | --quiet \
|
| 52 | --monitor \
|
| 53 | --event moved_to \
|
| 54 | --format %f \
|
| 55 | --include "$regexp" \
|
| 56 | "$dir_src" \
|
| 57 | | while read filename; do copy "$filename"; done
|
| 58 |
|
| 59 | print "FINISH\t========================="
|
| 60 |
|