From dd5e176395a67240d005c4c50ee11c926ed09fbb Mon Sep 17 00:00:00 2001 From: Alf Date: Wed, 9 Jul 2025 23:26:57 +0200 Subject: [PATCH] Readme --- README.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9de2fa0 --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ +# 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