This commit is contained in:
Alf
2025-07-09 23:26:57 +02:00
parent 9fd783a8d4
commit dd5e176395

108
README.md Normal file
View File

@ -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