feat: Trockenlauf als Standard-Aufruf, --execute/-e für echten Sync
Ohne Flags führt darktable_sync.sh jetzt einen Trockenlauf durch: - Banner mit Hinweis und Bestätigungsabfrage vor dem Start - rsync läuft mit --dry-run (keine Dateiänderungen) - Keine destruktiven Operationen: kein Backup, kein Token-Schreiben, kein sync_pending entfernen - Zusammenfassung nach Richtung (Upload/Download) und Aktion (neu/aktualisiert/gelöscht) aufgeschlüsselt - Optionale Detailansicht: Dateien gruppiert nach Typ (Foto, XMP, Datenbank, Video, Sonstiges) Mit --execute oder -e wird der echte Sync wie bisher ausgeführt. Desktop-Entry und Systemd-Service auf --execute aktualisiert. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -88,6 +88,51 @@ log_error() {
|
||||
echo "FEHLER: $*" >&2
|
||||
}
|
||||
|
||||
classify_filetype() {
|
||||
local file="$1"
|
||||
local ext="${file##*.}"; ext="${ext,,}"
|
||||
case "$ext" in
|
||||
jpg|jpeg|png|tif|tiff|dng|cr2|cr3|nef|arw|orf|rw2|raf|raw) echo "Foto" ;;
|
||||
xmp) echo "XMP" ;;
|
||||
db|bak) echo "Datenbank" ;;
|
||||
mp4|mov|avi|mkv|mts|m2ts) echo "Video" ;;
|
||||
*) echo "Sonstiges" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
format_rsync_details() {
|
||||
local log_file="$1" direction_label="$2" direction="$3"
|
||||
[ -f "$log_file" ] || return 0
|
||||
local prefix; [ "$direction" = "up" ] && prefix=">f" || prefix="<f"
|
||||
|
||||
local label pattern files
|
||||
while IFS=: read -r label pattern; do
|
||||
files=$(grep -E "$pattern" "$log_file" 2>/dev/null \
|
||||
| sed 's/^[^ ]* *//' | sort) || true
|
||||
[ -n "$files" ] || continue
|
||||
|
||||
local typ typed
|
||||
for typ in Foto XMP Datenbank Video Sonstiges; do
|
||||
typed=$(echo "$files" | while IFS= read -r f; do
|
||||
[ "$(classify_filetype "$f")" = "$typ" ] && echo " $f"
|
||||
done)
|
||||
[ -n "$typed" ] || continue
|
||||
log_step "$direction_label – $typ ($label)"
|
||||
echo "$typed"
|
||||
done
|
||||
done <<EOF
|
||||
neu:^${prefix}[+]{9}
|
||||
aktualisiert:^${prefix}[^+]
|
||||
gelöscht:^\*deleting
|
||||
EOF
|
||||
}
|
||||
|
||||
confirm_dry_run() {
|
||||
[ "${DRY_RUN_SKIP_CONFIRM:-0}" = "1" ] && return 0
|
||||
ask_user "Darktable Sync – Trockenlauf" \
|
||||
"Trockenlauf starten?\n\nEs werden keine Dateien verändert oder übertragen."
|
||||
}
|
||||
|
||||
ssh_server() {
|
||||
ssh -o ConnectTimeout=5 -o BatchMode=yes \
|
||||
-p "$SERVER_SSH_PORT" "$SERVER_USER@$SERVER_IP" "$@"
|
||||
|
||||
Reference in New Issue
Block a user