nextcloud: Fix subfolder sync
[shutils.git] / nextcloud / nextcloud-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 [ARGS...]
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 ARGS Passed to nextcloudcmd
34
35 EXAMPLE
36 $0 ~/.vimwiki https://cloud.example.com --path vimwiki
37 EOF
38 }
39
40 NCC_OPTS="-n"
41 IWAIT_OPTS=""
42
43 SILENT=0
44 ONESHOT=0
45 PERIOD=600
46
47 while getopts "host:" OPTION; do
48 case "${OPTION}" in
49 h)
50 usage
51 exit
52 ;;
53 o)
54 ONESHOT=1
55 ;;
56 s)
57 SILENT=1
58 NCC_OPTS="${NCC_OPTS} -s"
59 IWAIT_OPTS="${IWAIT_OPTS} -q"
60 ;;
61 t)
62 PERIOD=${OPTARG}
63 ;;
64 *)
65 usage
66 exit 1
67 ;;
68 esac
69 done
70 shift $((OPTIND-1))
71
72 SOURCE_DIR=$1
73 SERVER_URL=$2
74 shift
75 shift
76
77 if [ -z "${SOURCE_DIR}" ] ; then
78 echo "No source directory given."
79 usage
80 exit 1
81 fi
82
83 if [ -z "${SERVER_URL}" ] ; then
84 echo "No server URL given."
85 usage
86 exit 1
87 fi
88
89 NCC_OPTS="${NCC_OPTS} $@ ${SOURCE_DIR} ${SERVER_URL}"
90
91 while true; do
92 echo "About to sync..."
93 sleep 2
94 [ "$SILENT" = "1" ] || echo "[$(date '+%F %X')] Perform sync..."
95
96 ${NCC} ${NCC_OPTS}
97
98 [ "${ONESHOT}" = "1" ] && break
99
100 sleep 3
101 [ "$SILENT" = "1" ] || echo ""
102 [ "$SILENT" = "1" ] || echo "[$(date '+%F %X')] Wait for ${PERIOD} secs or source directory change."
103 ${IWAIT} ${IWAIT_OPTS} -t ${PERIOD} -r -e modify -e move -e create -e delete ${SOURCE_DIR}
104 done