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
- Funktionsweise
- Vorteile
- Voraussetzungen
- Installation
- Konfiguration
- Verwendung
- Wichtige Hinweise & Best Practices
- Fehlerbehebung
- Lizenz
- 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
- Dateisuche: Das Skript durchsucht ein definiertes
SOURCE_DIR(und dessen Unterverzeichnisse) nach Dateien, die kleiner sind als ein konfigurierbarerMAX_SIZE_BYTESWert. - Dateiliste: Die gefundenen Dateipfade werden sicher (unterstützt Leerzeichen und Sonderzeichen in Dateinamen) in einer temporären Datei gespeichert.
- 7z-Archivierung: Ein neues 7z-Archiv mit einem Zeitstempel im Namen wird im
ARCHIVE_DIRerstellt. Alle Dateien aus der temporären Liste werden mit hoher Komprimierung in dieses Archiv hinzugefügt. - Dateiverschiebung (Löschen): Nach erfolgreicher Erstellung des 7z-Archivs werden die Originaldateien aus dem
SOURCE_DIRgelöscht. - Protokollierung: Alle Schritte und Ergebnisse werden in einer dedizierten Log-Datei im
LOG_DIRprotokolliert.
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(oderyum install) - macOS (mit Homebrew):
brew install p7zip
- Debian/Ubuntu:
Installation
- Klonen Sie das Repository:
git clone [https://github.com/IhrBenutzername/IhrRepositoryname.git](https://github.com/IhrBenutzername/IhrRepositoryname.git) cd IhrRepositoryname - Machen Sie das Skript ausführbar:
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
- Beispiel:
MAX_SIZE_BYTES: Die maximale Größe (in Bytes), bis zu der eine Datei als "klein" betrachtet und archiviert werden soll.- Beispiel:
1048576für 1 MB (1024 * 1024 Bytes) - Beispiel:
5242880für 5 MB
- Beispiel:
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
- Beispiel:
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
- Beispiel:
Verwendung
DRINGEND EMPFOHLEN: Testen Sie das Skript zuerst mit Testdaten!
- Erstellen Sie Testdaten (Beispiel):
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 - Konfigurieren Sie das Skript für den Testlauf:
Passen Sie
SOURCE_DIR,ARCHIVE_DIRundLOG_DIRinarchive_small_files.shentsprechend an (z.B./tmp/test_source,/tmp/test_archives,/tmp/test_logs). - Führen Sie den Testlauf durch:
./archive_small_files.sh - Überprüfen Sie die Ergebnisse:
- Schauen Sie in
LOG_DIRnach der Log-Datei (z.B.small_file_archive_YYYYMMDD_HHMMSS.log). - Prüfen Sie, ob die kleinen Dateien aus
/tmp/test_sourceverschwunden sind. - Prüfen Sie, ob ein
.7z-Archiv in/tmp/test_archiveserstellt wurde und ob die kleinen Dateien darin enthalten sind.
- Schauen Sie in
Produktionslauf:
Nachdem Sie das Skript erfolgreich getestet und die Konfiguration überprüft haben, können Sie es im gewünschten Produktionsverzeichnis ausführen:
./archive_small_files.sh