From f70d865d12e7c3dae368a71f924b753fe5d4f420 Mon Sep 17 00:00:00 2001 From: alf Date: Sat, 21 Jun 2025 20:48:17 +0000 Subject: [PATCH] README.md aktualisiert --- README.md | 67 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a2e7bc0..764e191 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,63 @@ Write once, read many-Speicher -## Aufsetzen ## +## Ablauf ## +### Projektverzeichnisse vorbereiten ### +~~~ +mkdir mein_repo +cd mein_repo +git init +mkdir Archiv # Das ist dein WORM-Speicher im Git-Repo +mkdir Neu # Hier legst du temporär neue Dateien ab +~~~ -1. Erstelle ein lokales git -1. Speichere den hook im Verzeichnis .git/hooks/ -1. Nutze die bash-Scripte zum regelmäßigen Hinzufügen von Dateien. +### pre-commit-hook einrichten ### +Siehe Datei "pre-commit" -## Benötigt ## -Es werden drei Verzeichnisse benötigt: -1. Das Projektverzeichnis -1. Darunter die beiden Verzeichnisse "Neu" -11. und "Archiv" +### Das Cron-Script einrichten ### +Um automatisiert Dateien dem WORM-Speicher zuzuführen, werden sie im Verzeichnis "Neu" gespeichert (auch Unterverzeichnisse). Cron sorgt für die Übertragung der Dateien, die noch nicht im WORM-Speicher vorhanden sind. Hier das Script: +~~~ +#!/bin/bash + +GIT_REPO_PATH="/home/alf/MEINWORM" +NEW_FILES_DIR="Neu" +ARCHIVE_TARGET_DIR="Archiv" +LOG_FILE="/home/alf/archive_sync.log" # Pfad anpassen + +log_message() { echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a "$LOG_FILE"; } + +log_message "--- Archive Sync Script Started ---" +cd "$GIT_REPO_PATH" || { log_message "ERROR: Could not change to Git repository directory. Exiting."; exit 1; } +mkdir -p "$ARCHIVE_TARGET_DIR" + +find "$NEW_FILES_DIR" -type f | while read FILE_PATH_IN_NEW +do + FILE_FULL_NAME=$(basename "$FILE_PATH_IN_NEW") + TARGET_FILE_PATH="$ARCHIVE_TARGET_DIR/$FILE_FULL_NAME" + + if git ls-files --error-unmatch -- "$TARGET_FILE_PATH" &>/dev/null; then + log_message " File '$FILE_FULL_NAME' already exists in '$ARCHIVE_TARGET_DIR/'. Skipping." + else + log_message " File '$FILE_FULL_NAME' is new to '$ARCHIVE_TARGET_DIR/'. Adding..." + cp "$FILE_PATH_IN_NEW" "$TARGET_FILE_PATH" + git add "$TARGET_FILE_PATH" + if ! git diff --cached --quiet --exit-code; then + git commit -m "Add new file: $FILE_FULL_NAME to archive" "$TARGET_FILE_PATH" || { + log_message " WARNING: Commit for '$FILE_FULL_NAME' failed. (Pre-commit hook active?)" + git restore --staged "$TARGET_FILE_PATH" + git restore "$TARGET_FILE_PATH" + } + if [ $? -eq 0 ]; then + log_message " Successfully committed '$FILE_FULL_NAME'." + # rm "$FILE_PATH_IN_NEW" # Optional: Originaldatei aus Neu/ löschen + fi + else + log_message " No changes staged for $FILE_FULL_NAME. Skipping commit for this file." + fi + fi +done +log_message "No new files committed. Skipping push." # Da kein Remote genutzt wird +log_message "--- Archive Sync Script Finished ---" +exit 0 +~~~ +Es gibt ein weiteres Script, bei dem bei Vorhandensein \ No newline at end of file