Zruck zum Blog, du Zniachtl
Juni 2019·1 Min. zum LesnVo da KI übersetzt

Autopush - Einfach gänderte Dateien hochlodn

#auf-server-hochladen#auto-upload#automatisch-hochladen#autopush-to-server#autoupload#dateien-aktualisieren#hochladen#upload#upload-to-server

I hob ma zur Vereinfachung vom Webdesign/Webdevelopment-Workflow a klans Autopush-Skript gschriebn. Des Skript überwacht an bestimmten Ordner und olle seine Unterordner auf Änderungen und lodt de gänderten Dateien via SCP auf an Remote-Server. Wer also gern lokal entwickelt, die Änderungen aber direkt auf sein Server pushn wü und ned dauernd manuell hochlodn mecht, findet an dem Skript bestimmt Gfallen :) Wia imma gilt: Koa Haftung für Schäden.

Wichtig:

  1. Ihr miassts euch via SSH-Key am Server authentifiziern, sonst muass des Bash-Skript no minimal ogepasst wern.
  2. Ihr miassts fswatch installiert hobn.

Autopush läuft folgendermaßen ab: Ihr erstöts a Autopush-Config-Datei im ini-Format, de ois erster Parameter an des Bash-Skript übergebn wird. De Autopush-Datei is folgendermaßen aufbaut:

  • remote_host= Der Host, an den ihr de Dateien pushn wollts. Kann a Domain, aber a a IP sei. Denkts an die SSH-Keys.
  • remote_username= Der Nutzername, mit dem ihr euch am Server authentifiziert.
  • remote_mapping= Der Pfad, auf den gmappt wird. Änderungen in local_source wern relativ zum remote_mapping hochgladen.
  • local_source= Der lokale Pfad, der überwacht und gepusht wern soi.
  • exclude=source,_Server Dateien, de ned gepusht wern soin und von da Überwachung ausgnommen sand.

Achtung: Programmatisch wern .DS_Store-Dateien ausgschlossen und miassn ned explizit angebn wern.

Da Ordner in local_source wird vom Skript überwacht, sobois sich do a Datei ändert, wird sie via

scp local_file_path remote_username@remote_host:/remote_mapping/absolute_local_path

auf den Server glodn. Aufrufen lasst si des Bash-Skript einfach via:

autopush.sh /Pfad/zur/Config.ini

Und do des komplette Skript:

#!/bin/sh
if [ $# -eq 1 ]; then
    CONFIGFILE=$1
    . $1
    echo "Autopushing '$local_source' now..."
    /usr/local/bin/fswatch -0 "$local_source" | xargs -0 -n 1 sh $0 0 $CONFIGFILE
elif [ $# -eq 2 ] && [ $2="--fullsync" ]; then
    CONFIGFILE=$1
    . $1
    echo "Fullsyncing '$local_source' now..."
    scp -r $local_source/* $remote_username@$remote_host:$remote_mapping
else
    CONFIGFILE=$2
    FILE=$3
    . $CONFIGFILE
    length_local_source=${#local_source}
    length_changed_file_absolute=${#FILE}
    length_changed_file_relative=$((0-length_local_source-length_changed_file_absolute))
    relative_path=${FILE:$length_local_source}
    donotpush=(${exclude//,/ })
    donotpush+=($CONFIGFILE)
    donotpush+=(".DS_Store")
    for i in "${donotpush[@]}"
    do
        if [[ $FILE == *$i* ]]; then
            echo "[STOP] DO NOT PUSH $FILE (MATCHES '$i')"
            exit
        fi
    done
    remote_target="$remote_mapping$relative_path"
    if [ -d "$FILE" ] || [ -f "$FILE" ]; then
        echo "[CHANGE] `date '+%Y-%m-%d %H:%M:%S'` $relative_path -> $remote_target";
        scp -r $FILE $remote_username@$remote_host:$remote_target
    else
        echo "[DELETE] rm -rf $remote_target";
        ssh $remote_username@$remote_host "rm -rf $remote_target"
    fi
fi
NeicherNagelneichs MacBook schoit si einfach ausElterCentOS - Server-Essentials