|
|
@@ -0,0 +1,59 @@ |
|
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=========================" |