commit 9fd783a8d485b040cc51dc9b4be6c3412b351dc0 Author: Alf Oberkoetter Date: Wed Jul 9 23:22:38 2025 +0200 First diff --git a/kleine_weg.sh b/kleine_weg.sh new file mode 100644 index 0000000..e84bcce --- /dev/null +++ b/kleine_weg.sh @@ -0,0 +1,71 @@ +#!/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" diff --git a/kleine_weg1.sh b/kleine_weg1.sh new file mode 100644 index 0000000..2827daa --- /dev/null +++ b/kleine_weg1.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# Bash-Skript zum Finden und Archivieren kleiner Dateien in 7z-Archiven +# ACHTUNG: Die Dateien werden nach erfolgreicher Archivierung verschoben (gelöscht)! + +# --- KONFIGURATION --- +SOURCE_DIR="/path/to/your/source/directory" # Das Quellverzeichnis, das durchsucht werden soll +MAX_SIZE_BYTES=1048576 # Maximale Dateigröße in Bytes (hier: 1 MB = 1024 * 1024 Bytes) +ARCHIVE_DIR="/path/to/your/archive/directory" # Das Verzeichnis, in das die 7z-Archive erstellt werden +LOG_DIR="/var/log/small_file_archiver" # Verzeichnis für Log-Dateien +TEMP_FILE_LIST="/tmp/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" +# Wichtig: -print0 und xargs -0 für robusten Umgang mit Leerzeichen in Dateinamen +find "$SOURCE_DIR" -type f -size -${MAX_SIZE_BYTES}c -print0 > "$TEMP_FILE_LIST" 2>> "$LOG_FILE" + +# Überprüfen, ob Dateien gefunden wurden +# wc -l funktioniert nicht zuverlässig mit NUL-Zeichen, daher prüfen wir auf Dateigröße +if [ ! -s "$TEMP_FILE_LIST" ]; 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 + +# Zeigt die gefundenen Dateien im Log an (für Debugging) +echo "Gefundene Dateien zum Archivieren:" | tee -a "$LOG_FILE" +# NUL-Bytes durch Newlines ersetzen, damit cat es lesbar macht +tr '\0' '\n' < "$TEMP_FILE_LIST" | tee -a "$LOG_FILE" + +# Archivieren der gefundenen Dateien +echo "Erstelle 7z-Archiv: ${ARCHIVE_NAME}..." | tee -a "$LOG_FILE" +# Wichtig: Ohne -sdel hier! +# Hier nutzen wir xargs -0 für 7z, um die Dateiliste sicher zu übergeben +# 7z Befehl: '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 +if xargs -0 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." | tee -a "$LOG_FILE" + echo "Archivpfad: ${ARCHIVE_DIR}/${ARCHIVE_NAME}" | tee -a "$LOG_FILE" + + # Jetzt die Originaldateien löschen + echo "Lösche Originaldateien..." | tee -a "$LOG_FILE" + if xargs -0 rm -- < "$TEMP_FILE_LIST" >> "$LOG_FILE" 2>&1; then + echo "Originaldateien erfolgreich gelöscht." | tee -a "$LOG_FILE" + else + echo "FEHLER: Konnte einige Originaldateien NICHT löschen." | tee -a "$LOG_FILE" + echo "Bitte manuell überprüfen und die Log-Datei einsehen: ${LOG_FILE}" | tee -a "$LOG_FILE" + fi +else + echo "Fehler beim Erstellen des 7z-Archivs. Originaldateien wurden NICHT gelöscht." | 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"