152 lines
5.6 KiB
Bash
152 lines
5.6 KiB
Bash
# ==========================================
|
||
# 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
|
||
|