#!/bin/bash # Bash-Skript zum Finden und Archivieren kleiner Dateien in 7z-Archiven # --- KONFIGURATION --- GRUND_DIR="/home/alf/Dokumente" SOURCE_DIR="$GRUND_DIR/tmp" # Das Quellverzeichnis, das durchsucht werden soll MAX_SIZE_BYTES=1048576 # Maximale Dateigröße in Bytes (hier: 1 MB = 1024 * 1024 Bytes) ARCHIVE_DIR="$GRUND_DIR/tmparchiv" # Das Verzeichnis, in das die 7z-Archive verschoben werden LOG_DIR="$GRUND_DIR/" # Verzeichnis für Log-Dateien TEMP_FILE_LIST="$GRUND_DIR/tmpwork/small_files_to_archive_$$" # Temporäre Datei für die Dateiliste # --- SETUP --- TIMESTAMP=$(date +"%Y%m%d_%H%M%S") ARCHIVE_NAME="small_files_archive_${TIMESTAMP}.7z" LOG_FILE="${LOG_DIR}/small_file_archive_${TIMESTAMP}.log" # Überprüfen, ob 7z installiert ist if ! command -v 7z &> /dev/null then echo "Fehler: '7z' wurde nicht gefunden. Bitte installieren Sie 'p7zip-full' (oder äquivalentes Paket)." | tee -a "$LOG_FILE" exit 1 fi # Erstellen der Verzeichnisse, falls nicht vorhanden mkdir -p "$ARCHIVE_DIR" 2>> "$LOG_FILE" mkdir -p "$LOG_DIR" 2>> "$LOG_FILE" echo "--- Starte Archivierung kleiner Dateien ---" | tee "$LOG_FILE" echo "Quellverzeichnis: ${SOURCE_DIR}" | tee -a "$LOG_FILE" echo "Maximale Dateigröße: ${MAX_SIZE_BYTES} Bytes (~$((MAX_SIZE_BYTES / 1024 / 1024)) MB)" | tee -a "$LOG_FILE" echo "Archivierungsverzeichnis: ${ARCHIVE_DIR}" | tee -a "$LOG_FILE" echo "Log-Datei: ${LOG_FILE}" | tee -a "$LOG_FILE" echo "------------------------------------------" | tee -a "$LOG_FILE" # Finde kleine Dateien und schreibe sie in eine temporäre Liste echo "Suche nach Dateien kleiner als ${MAX_SIZE_BYTES} Bytes..." | tee -a "$LOG_FILE" find "$SOURCE_DIR" -type f -size -${MAX_SIZE_BYTES}c > "$TEMP_FILE_LIST" 2>> "$LOG_FILE" # Überprüfen, ob Dateien gefunden wurden NUM_FILES=$(wc -l < "$TEMP_FILE_LIST") if [ "$NUM_FILES" -eq 0 ]; then echo "Keine Dateien kleiner als ${MAX_SIZE_BYTES} Bytes gefunden. Keine Archivierung nötig." | tee -a "$LOG_FILE" rm -f "$TEMP_FILE_LIST" echo "--- Archivierung beendet ---" | tee -a "$LOG_FILE" exit 0 fi echo "Gefundene Dateien zum Archivieren ($NUM_FILES):" | tee -a "$LOG_FILE" cat "$TEMP_FILE_LIST" | tee -a "$LOG_FILE" # Zeigt die gefundenen Dateien im Log an # Archivieren der gefundenen Dateien echo "Erstelle 7z-Archiv: ${ARCHIVE_NAME}..." | tee -a "$LOG_FILE" # 'a' für Add, '-mx=9' für Ultra-Komprimierung, '-m0=lzma2' für LZMA2-Algorithmus, # '-mfb=64 -md=32m -ms=on' sind typische LZMA2-Parameter # '-sdel' löscht die Originaldateien nach erfolgreicher Archivierung if 7z a -mx=9 -m0=lzma2 -mfb=64 -md=32m -ms=on "${ARCHIVE_DIR}/${ARCHIVE_NAME}" "@${TEMP_FILE_LIST}" >> "$LOG_FILE" 2>&1; then echo "7z-Archiv erfolgreich erstellt und Dateien verschoben." | tee -a "$LOG_FILE" echo "Archivpfad: ${ARCHIVE_DIR}/${ARCHIVE_NAME}" | tee -a "$LOG_FILE" else echo "Fehler beim Erstellen des 7z-Archivs. Die Dateien wurden NICHT verschoben." | tee -a "$LOG_FILE" echo "Bitte überprüfen Sie die Log-Datei für Details: ${LOG_FILE}" | tee -a "$LOG_FILE" rm -f "$TEMP_FILE_LIST" # Temporäre Liste trotzdem entfernen echo "--- Archivierung beendet ---" | tee -a "$LOG_FILE" exit 1 fi # Aufräumen der temporären Dateiliste rm -f "$TEMP_FILE_LIST" 2>> "$LOG_FILE" echo "--- Archivierung erfolgreich beendet ---" | tee -a "$LOG_FILE"