home · contact · privacy
Update Firefox.
[config] / all_new_2018 / borg.sh
index 759779564452f9b80a82ba9df9cfbe72ed16a586..18321b15fa949256cc3cd13077e6002ef73cee52 100755 (executable)
@@ -1,6 +1,5 @@
 #!/bin/sh
 set -e
-set -x
 
 standard_repo="borg"
 config_file="${HOME}/.borgrepos"
@@ -11,16 +10,27 @@ usage() {
     echo "store"
     echo "check"
     echo "export_keyfiles"
+    echo "orgpush"
+    echo "orgpull"
     false
 }
 
 read_pw() {
-    stty -echo
-    printf "Passphrase: "
-    read password
-    stty echo
-    printf "\n"
-    export BORG_PASSPHRASE="${password}"
+    if [ "${#SSH_AGENT_PID}" -eq 0 ]; then
+        eval $(ssh-agent)
+        echo "ssh-add"
+        stty -echo
+        ssh-add
+        stty echo
+    fi
+    if [ "${#BORG_PASSPHRASE}" -eq 0 ]; then
+        stty -echo
+        printf "Borg passphrase: "
+        read password
+        stty echo
+        printf "\n"
+        export BORG_PASSPHRASE="${password}"
+    fi
 }
 
 if [ ! -f "${config_file}" ]; then
@@ -44,8 +54,8 @@ if [ "${first_arg}" = "init" ]; then
     cat "${config_file}" >> "${tmp_file}"
     cp "${tmp_file}" "${config_file}"
 elif [ "${first_arg}" = "store" ]; then
-    if [ "$#" -lt 2 ]; then
-        echo "Need archive name and paths to archive."
+    if [ ! "$#" -eq 2 ]; then
+        echo "Need precisely two arguments: archive name and path to archive."
         false
     fi
     archive_name=$1
@@ -58,9 +68,9 @@ elif [ "${first_arg}" = "store" ]; then
             continue
         fi
         repo="${line}:${standard_repo}"
-        archive="${repo}::${archive_name}"
+        archive="${repo}::${archive_name}-{utcnow:%Y-%m-%dT%H:%M}"
         echo "Creating archive: ${archive}"
-        borg create --verbose --list "${archive}" ${to_backup}
+        borg create --verbose --list "${archive}" "${to_backup}"
     done
 elif [ "${first_arg}" = "check" ]; then
     if [ ! "$#" -eq 0 ]; then
@@ -101,6 +111,35 @@ elif [ "${first_arg}" = "export_keyfiles" ]; then
     mv "${tar_target}" "${cur_dir}"
     cd
     rm -rf "${tmp_dir}"
+elif [ "${first_arg}" = "orgpush" ]; then
+    archive_name="orgdir"
+    to_backup=~/org
+    read_pw
+    cat "${config_file}" | while read line; do
+        first_char=$(echo "${line}" | cut -c1)
+        if [ "${first_char}" = "#" ]; then
+            continue
+        fi
+        repo="${line}:${standard_repo}"
+        archive="${repo}::${archive_name}-{utcnow:%Y-%m-%dT%H:%M}"
+        echo "Creating archive: ${archive}"
+        borg create --verbose --list "${archive}" "${to_backup}" --exclude ~/org/.git
+    done
+elif [ "${first_arg}" = "orgpull" ]; then
+    archive_name="orgdir"
+    read_pw
+    cd /
+    cat "${config_file}" | while read line; do
+        first_char=$(echo "${line}" | cut -c1)
+        if [ "${first_char}" = "#" ]; then
+            continue
+        fi
+        repo="${line}:${standard_repo}"
+        archive=$(borg list "${repo}" | grep "${orgdir}" | tail -1 | cut -f1 -d' ')
+        echo "Pulling archive: ${archive}"
+        borg extract --verbose "${repo}::${archive}"
+        break
+    done
 else
     usage
 fi