Utoljára aktív 1740033429

inotifywait-cp.service Eredeti
1# Daemon file
2# Place or symlink it to /etc/systemd/system/inotifywait-cp.service
3# Enable and start: sudo systemctl enable --now inotifywait-cp
4# Check it: sudo systemctl status inotifywait-cp
5
6[Unit]
7Description=Photosync from android
8
9[Service]
10Type=simple
11Restart=always
12# correct these parameters as needed:
13User=user
14WorkingDirectory=/home/user
15ExecStart=bash /home/user/.local/bin/inotifywait-cp.sh
16
17[Install]
18WantedBy=network.target
19
inotifywait-cp.sh Eredeti
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
11dir_src="$HOME/Syncthing/Mobile/Camera"
12dir_dest="$HOME/some/safe/place"
13dir_logs="$HOME/inotifywait-cp-logs"
14regexp="[0-9]{8}_[0-9]{6}.*\.(jpg|mp4|gif)"
15
16print() {
17 echo -e "[`date '+%H:%M:%S'`] $*" \
18 | tee -a "$dir_logs/`date '+%Y%m%d'`.log"
19}
20
21copy () {
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
31mkdir -p "$dir_src" "$dir_dest" "$dir_logs"
32
33print "START\t========================="
34
35# First, try to backup files synced since last exec of this script
36ls -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
50inotifywait \
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
59print "FINISH\t========================="
60