Files
kleine_weg/README.md
2025-07-09 23:26:57 +02:00

6.0 KiB

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

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:
    git clone [https://github.com/IhrBenutzername/IhrRepositoryname.git](https://github.com/IhrBenutzername/IhrRepositoryname.git)
    cd IhrRepositoryname
    
  2. 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
  • 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):
    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:
    ./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:

./archive_small_files.sh