Readme
This commit is contained in:
108
README.md
Normal file
108
README.md
Normal 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
|
||||||
Reference in New Issue
Block a user