nextcloud: Add nc-inotify-sync
[shutils.git] / nextcloud / nc-inotify-sync
1 #!/bin/sh
2
3 NCC=/usr/bin/nextcloudcmd
4 if ! [ -x ${NCC} ]; then
5 echo "There is no ${NCC}."
6 exit 2
7 fi
8
9 IWAIT=/usr/bin/inotifywait
10 if ! [ -x ${IWAIT} ]; then
11 echo "There is no ${IWAIT}."
12 exit 2
13 fi
14
15 usage() {
16 cat << EOF
17
18 Calls nextcloudcmd to sync a source directory and server url. The script
19 triggers a synchronization when (i) the source directory was changed or (ii)
20 after some period, whatever happens first. The nextcloudcmd is called with
21 netrc for login.
22
23 Usage:
24 $0 [OPTIONS] source_dir server_url
25 $0 -h
26
27 OPTIONS:
28 -h Show this text
29 -o One-shot instead of looping
30 -s Silent, be less verbose
31 -t SECS Sync period if nothing changed locally.
32 Default: 180
33
34 EXAMPLE
35 $0 ~/.vimwiki https://cloud.example.com/remote.php/webdav/vimwiki
36 EOF
37 }
38
39 NCC_OPTS="-n"
40 IWAIT_OPTS=""
41
42 SILENT=0
43 ONESHOT=0
44 PERIOD=180
45
46 while getopts "host:" OPTION; do
47 case "${OPTION}" in
48 h)
49 usage
50 exit
51 ;;
52 o)
53 ONESHOT=1
54 ;;
55 s)
56 SILENT=1
57 NCC_OPTS="${NCC_OPTS} -s"
58 IWAIT_OPTS="${IWAIT_OPTS} -q"
59 ;;
60 t)
61 PERIOD=${OPTARG}
62 ;;
63 *)
64 usage
65 exit 1
66 ;;
67 esac
68 done
69 shift $((OPTIND-1))
70
71 SOURCE_DIR=$1
72 SERVER_URL=$2
73
74 if [ -z "${SOURCE_DIR}" ] ; then
75 echo "No source directory given."
76 usage
77 exit 1
78 fi
79
80 if [ -z "${SERVER_URL}" ] ; then
81 echo "No server URL given."
82 usage
83 exit 1
84 fi
85
86 NCC_OPTS="${NCC_OPTS} ${SOURCE_DIR} ${SERVER_URL}"
87
88 while true; do
89 echo "About to sync..."
90 sleep 2
91 [ "$SILENT" = "1" ] || echo "[$(date '+%F %X')] Perform sync..."
92
93 ${NCC} ${NCC_OPTS}
94
95 [ "${ONESHOT}" = "1" ] && break
96
97 sleep 3
98 [ "$SILENT" = "1" ] || echo ""
99 [ "$SILENT" = "1" ] || echo "[$(date '+%F %X')] Wait for ${PERIOD} secs or source directory change."
100 ${IWAIT} ${IWAIT_OPTS} -t ${PERIOD} -r -e modify -e move -e create -e delete ${SOURCE_DIR}
101 done