# Archivierung kleiner Dateien mit 7z Dieses Repository enthält ein Bash-Skript zur automatischen Identifizierung und Archivierung kleiner Dateien aus einem Quellverzeichnis in komprimierten 7z-Archiven. Die archivierten Dateien werden nach erfolgreicher Komprimierung aus dem Quellverzeichnis entfernt. ## Inhaltsverzeichnis * [Über dieses Skript](#über-dieses-skript) * [Funktionsweise](#funktionsweise) * [Vorteile](#vorteile) * [Voraussetzungen](#voraussetzungen) * [Installation](#installation) * [Konfiguration](#konfiguration) * [Verwendung](#verwendung) * [Wichtige Hinweise & Best Practices](#wichtige-hinweise--best-practices) * [Fehlerbehebung](#fehlerbehebung) * [Lizenz](#lizenz) * [Kontakt](#kontakt) ## Über dieses Skript Das Skript `archive_small_files.sh` wurde entwickelt, um große Mengen kleiner Dateien effizient zu verwalten, indem sie in komprimierte 7z-Archive verschoben werden. Dies ist besonders nützlich für: * **Cloud-Speicher-Optimierung:** Reduzierung von Kosten und Komplexität bei der Speicherung in Objektspeichern (wie AWS S3 Glacier Deep Archive, Google Cloud Storage Archive), die hohe Request-Gebühren und Mindestabrechnungsgrößen für kleine Objekte haben. * **Datenträgerbereinigung:** Freigabe von Speicherplatz auf lokalen oder Netzwerklaufwerken, indem viele kleine Dateien zu größeren, leichter verwaltbaren Archiven zusammengefasst werden. * **Verbesserung der Backup-Effizienz:** Das Sichern von wenigen großen Archivdateien ist oft schneller und ressourcenschonender als das Sichern unzähliger kleiner Dateien. ## Funktionsweise 1. **Dateisuche:** Das Skript durchsucht ein definiertes `SOURCE_DIR` (und dessen Unterverzeichnisse) nach Dateien, die kleiner sind als ein konfigurierbarer `MAX_SIZE_BYTES` Wert. 2. **Dateiliste:** Die gefundenen Dateipfade werden sicher (unterstützt Leerzeichen und Sonderzeichen in Dateinamen) in einer temporären Datei gespeichert. 3. **7z-Archivierung:** Ein neues 7z-Archiv mit einem Zeitstempel im Namen wird im `ARCHIVE_DIR` erstellt. Alle Dateien aus der temporären Liste werden mit hoher Komprimierung in dieses Archiv hinzugefügt. 4. **Dateiverschiebung (Löschen):** Nach erfolgreicher Erstellung des 7z-Archivs werden die Originaldateien aus dem `SOURCE_DIR` gelöscht. 5. **Protokollierung:** Alle Schritte und Ergebnisse werden in einer dedizierten Log-Datei im `LOG_DIR` protokolliert. ## Vorteile * **Kostenersparnis:** Optimiert die Nutzung von Cloud-Archivspeichern durch Reduzierung der Objektanzahl und Umgehung von Mindestabrechnungsgrößen. * **Speicherplatzeffizienz:** Komprimiert Daten und konsolidiert kleine Dateien. * **Automatisierung:** Einmal konfiguriert, kann das Skript wiederholt ausgeführt werden. * **Datensicherheit:** Dateien werden erst nach erfolgreicher Archivierung gelöscht. * **Übersichtlichkeit:** Protokollierung aller Aktionen für Nachvollziehbarkeit. ## Voraussetzungen * **Bash:** Das Skript wurde für die Bash-Shell entwickelt und getestet. * **7zip (p7zip-full):** Das `7z`-Kommandozeilen-Tool muss auf Ihrem System installiert sein. * **Debian/Ubuntu:** `sudo apt-get install p7zip-full` * **CentOS/RHEL/Fedora:** `sudo dnf install p7zip p7zip-plugins` (oder `yum install`) * **macOS (mit Homebrew):** `brew install p7zip` ## Installation 1. **Klonen Sie das Repository:** ```bash git clone [https://github.com/IhrBenutzername/IhrRepositoryname.git](https://github.com/IhrBenutzername/IhrRepositoryname.git) cd IhrRepositoryname ``` 2. **Machen Sie das Skript ausführbar:** ```bash chmod +x archive_small_files.sh ``` ## Konfiguration Öffnen Sie die Datei `archive_small_files.sh` mit einem Texteditor und passen Sie die folgenden Variablen im Bereich "KONFIGURATION" an Ihre Bedürfnisse an: * **`SOURCE_DIR`**: Der vollständige Pfad zu dem Verzeichnis, das Sie durchsuchen und dessen kleine Dateien Sie archivieren möchten. * *Beispiel:* `/home/user/my_data` * **`MAX_SIZE_BYTES`**: Die maximale Größe (in Bytes), bis zu der eine Datei als "klein" betrachtet und archiviert werden soll. * *Beispiel:* `1048576` für 1 MB (1024 * 1024 Bytes) * *Beispiel:* `5242880` für 5 MB * **`ARCHIVE_DIR`**: Der vollständige Pfad zu dem Verzeichnis, in dem die erstellten `.7z`-Archive gespeichert werden sollen. Stellen Sie sicher, dass dieses Verzeichnis existiert und das Skript Schreibrechte dafür hat. * *Beispiel:* `/home/user/archives` * **`LOG_DIR`**: Das Verzeichnis, in dem die Log-Dateien des Skripts abgelegt werden. Stellen Sie sicher, dass das Skript Schreibrechte dafür hat. * *Beispiel:* `/var/log/small_file_archiver` ## Verwendung **DRINGEND EMPFOHLEN: Testen Sie das Skript zuerst mit Testdaten!** 1. **Erstellen Sie Testdaten (Beispiel):** ```bash mkdir -p /tmp/test_source/subdir echo "Dies ist eine kleine Datei." > /tmp/test_source/small_file_1.txt head -c 500K /dev/urandom > /tmp/test_source/small_file_2.bin # 500 KB head -c 2M /dev/urandom > /tmp/test_source/large_file_1.bin # 2 MB (wird nicht archiviert) echo "Noch eine kleine Datei." > /tmp/test_source/subdir/another_small.txt mkdir -p /tmp/test_archives mkdir -p /tmp/test_logs ``` 2. **Konfigurieren Sie das Skript für den Testlauf:** Passen Sie `SOURCE_DIR`, `ARCHIVE_DIR` und `LOG_DIR` in `archive_small_files.sh` entsprechend an (z.B. `/tmp/test_source`, `/tmp/test_archives`, `/tmp/test_logs`). 3. **Führen Sie den Testlauf durch:** ```bash ./archive_small_files.sh ``` 4. **Überprüfen Sie die Ergebnisse:** * Schauen Sie in `LOG_DIR` nach der Log-Datei (z.B. `small_file_archive_YYYYMMDD_HHMMSS.log`). * Prüfen Sie, ob die kleinen Dateien aus `/tmp/test_source` verschwunden sind. * Prüfen Sie, ob ein `.7z`-Archiv in `/tmp/test_archives` erstellt wurde und ob die kleinen Dateien darin enthalten sind. **Produktionslauf:** Nachdem Sie das Skript erfolgreich getestet und die Konfiguration überprüft haben, können Sie es im gewünschten Produktionsverzeichnis ausführen: ```bash ./archive_small_files.sh