scripte/packen.sh

152 lines
5.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ==========================================
# Anleitung: packen.sh
# ==========================================
# Dieses Skript dient dazu, ein angegebenes Verzeichnis zu verarbeiten, indem es entscheidet, ob:
# 1. Das Verzeichnis gepackt werden soll, oder
# 2. Nur verschoben werden soll (falls es ausschließlich `.rar`-Dateien enthält).
#
# Ziel: Strukturierte Archivierung von Verzeichnissen in einem Zielverzeichnis.
# ==========================================
# Verwendung:
# ==========================================
# Aufruf:
# ./packen.sh [j|n] /Pfad/zum/Verzeichnis/
#
# Parameter:
# - `j`: Automatische Zustimmung für das Packen/Verschieben.
# - `n`: Keine Aktion ausführen, Skript wird beendet.
# - `/Pfad/zum/Verzeichnis/`: Pfad zum Verzeichnis, das verarbeitet werden soll.
#
# Beispiel:
# ./packen.sh j /mnt/synology/aufmasse/test/
# ==========================================
# Ablaufplan:
# ==========================================
# 1. Überprüfen, ob das Verzeichnis existiert und ob das Zielverzeichnis vorhanden ist (ggf. erstellen).
# 2. Prüfen, ob im Verzeichnis ausschließlich `.rar`-Dateien enthalten sind.
# a) Wenn ja:
# - `.rar`-Dateien ins Zielverzeichnis verschieben.
# - Ursprungsverzeichnis löschen, falls es leer ist.
# b) Wenn nein:
# - Verzeichnis in eine `.rar`-Datei packen und in das Zielverzeichnis verschieben.
# 3. Ausgabe einer Erfolgs- oder Fehlermeldung.
# ==========================================
# Anpassung des Zielverzeichnisses:
# ==========================================
# Standardmäßig werden die gepackten/verarbeiteten Verzeichnisse unter `/mnt/synology/aufmasse_archiv/` abgelegt.
# Um das Zielverzeichnis zu ändern:
# 1. Bearbeiten Sie die Zeile:
# ZIELVERZEICHNIS="/mnt/synology/aufmasse_archiv"
# 2. Ändern Sie den Pfad in das gewünschte Zielverzeichnis.
# 3. Beispiel:
# ZIELVERZEICHNIS="/backup/archiv"
#
# ==========================================
# Voraussetzungen:
# ==========================================
# - RAR muss installiert sein:
# - Ubuntu/Debian: sudo apt-get install p7zip-full p7zip-rar
# - Zugriff auf die Quell- und Zielverzeichnisse.
# - Skript benötigt Ausführungsrechte:
# chmod +x packen.sh
#
# ==========================================
# Ende der Anleitung
# ==========================================
#!/bin/bash
# Überprüfen, ob RAR installiert ist
if ! command -v rar &> /dev/null; then
echo "RAR ist nicht installiert."
echo "Bitte installieren Sie es mit:"
echo " - Ubuntu/Debian: sudo apt-get update && sudo apt-get install p7zip-full p7zip-rar"
exit 1
fi
# Überprüfen, ob genügend Argumente übergeben wurden
if [ $# -lt 2 ]; then
echo "Verwendung: $0 [j|n] /Pfad/zum/Verzeichnis/"
exit 1
fi
# Eingaben aus den Argumenten
ANTWORT="${1,,}" # Erstes Argument: j oder n, in Kleinbuchstaben konvertiert
VERZEICHNIS=$(realpath "$2") # Zweites Argument: Verzeichnis
# Überprüfen, ob die Antwort korrekt ist
if [[ "$ANTWORT" != "j" && "$ANTWORT" != "n" ]]; then
echo "Ungültige Eingabe für die Antwort. Verwenden Sie 'j' oder 'n'."
exit 1
fi
# Überprüfen, ob das Verzeichnis existiert
if [ ! -d "$VERZEICHNIS" ]; then
echo "Das Verzeichnis '$VERZEICHNIS' existiert nicht."
exit 1
fi
# Verzeichnisname extrahieren
ARCHIVNAME=$(basename "$VERZEICHNIS")
# Zielverzeichnis für das Archiv
ZIELVERZEICHNIS="/mnt/synology/aufmasse_archiv"
# Sicherstellen, dass das Zielverzeichnis existiert
if [ ! -d "$ZIELVERZEICHNIS" ]; then
mkdir -p "$ZIELVERZEICHNIS" || { echo "Fehler beim Erstellen des Zielverzeichnisses."; exit 1; }
echo "Zielverzeichnis '$ZIELVERZEICHNIS' wurde erstellt."
fi
# Zielverzeichnis für den spezifischen Ordner erstellen
NEUER_ORDNER="$ZIELVERZEICHNIS/$ARCHIVNAME"
if [ ! -d "$NEUER_ORDNER" ]; then
mkdir -p "$NEUER_ORDNER" || { echo "Fehler beim Erstellen des Verzeichnisses '$NEUER_ORDNER'."; exit 1; }
echo "Neues Verzeichnis '$NEUER_ORDNER' wurde erstellt."
fi
# Prüfen, ob sich im Verzeichnis nur .rar-Dateien befinden
echo "Überprüfe den Inhalt des Verzeichnisses '$VERZEICHNIS'..."
if find "$VERZEICHNIS" -type f ! -name '*.rar' -print -quit | grep -q .; then
# Andere Dateien oder Verzeichnisse gefunden normal packen
if [[ "$ANTWORT" == "j" ]]; then
# In das übergeordnete Verzeichnis wechseln
cd "$(dirname "$VERZEICHNIS")" || { echo "Fehler beim Wechseln des Verzeichnisses."; exit 1; }
# Zielarchiv definieren
ARCHIVPFAD="$NEUER_ORDNER/$ARCHIVNAME.rar"
# RAR-Archiv erstellen, nur den Ordner selbst packen und das ursprüngliche Verzeichnis löschen
rar a -v1g -r -df "$ARCHIVPFAD" "$ARCHIVNAME"
if [ $? -eq 0 ]; then
echo "Das Verzeichnis wurde erfolgreich in $ARCHIVPFAD gepackt und gelöscht."
else
echo "Fehler beim Erstellen des RAR-Archivs."
exit 1
fi
else
echo "Keine Aktion ausgeführt, da die Antwort 'n' war."
exit 0
fi
else
# Nur .rar-Dateien gefunden verschieben, aber keine verschachtelten Ordner erstellen
echo "Das Verzeichnis '$VERZEICHNIS' enthält nur .rar-Dateien. Die Dateien werden direkt verschoben."
# .rar-Dateien in das Zielverzeichnis verschieben
mv "$VERZEICHNIS"/*.rar "$NEUER_ORDNER/"
if [ $? -eq 0 ]; then
echo "Alle .rar-Dateien wurden erfolgreich nach '$NEUER_ORDNER' verschoben."
# Ursprüngliches Verzeichnis löschen, falls es leer ist
rmdir "$VERZEICHNIS" 2>/dev/null || echo "Das Verzeichnis '$VERZEICHNIS' konnte nicht gelöscht werden (möglicherweise nicht leer)."
else
echo "Fehler beim Verschieben der .rar-Dateien."
exit 1
fi
fi