#!/usr/bin/env bash
# Funktion für die usage-Anzeige
usage() {
echo "Verwendung: $0 <Pfad_Ordner1> <Pfad_Ordner2> [Ausgabedatei]"
exit 1
}
# Überprüfung der Argumente (mindestens 2, maximal 3)
if [ $# -lt 2 ] || [ $# -gt 3 ]; then
usage
fi
DIR1="$1"
DIR2="$2"
OUTPUT_FILE="${3:-}" # Drittes Argument ist optional
# Validierung der Verzeichnisse
if [ ! -d "$DIR1" ]; then
echo "Fehler: '$DIR1' ist kein gültiges Verzeichnis."
exit 1
fi
if [ ! -d "$DIR2" ]; then
echo "Fehler: '$DIR2' ist kein gültiges Verzeichnis."
exit 1
fi
# Befehlszusammensetzung
# Wir nutzen eine Variable für den Befehl, um die Umleitung dynamisch zu gestalten
CMD="diff -rq"
if [ -n "$OUTPUT_FILE" ]; then
# Wenn eine Datei angegeben ist, leite Ausgabe dorthin um (und optional auch auf stdout mit tee)
# Hier: Nur in Datei umleiten (leiser Modus für Terminal)
echo "Vergleich läuft... Ergebnis wird in '$OUTPUT_FILE' gespeichert."
if $CMD "$DIR1" "$DIR2" > "$OUTPUT_FILE"; then
echo "Ergebnis: Die Verzeichnisse sind identisch."
echo "(Keine Unterschiede in die Datei geschrieben)"
else
echo "Ergebnis: Unterschiede festgestellt und in '$OUTPUT_FILE' gespeichert."
fi
else
# Keine Datei angegeben: normale Ausgabe auf dem Terminal
if $CMD "$DIR1" "$DIR2"; then
echo "Ergebnis: Die Verzeichnisse sind identisch."
else
echo "Ergebnis: Es wurden Unterschiede festgestellt (siehe Ausgabe oben)."
fi
fi
Funktionsweise & Optionen
- Erforderliche Argumente: Das Skript erwartet zwingend zwei Argumente (
$1und$2). Wenn diese fehlen, wird eine usage-Nachricht ausgegeben. - Optionales Argument:
${3:-}weist der VariableOUTPUT_FILEden dritten Parameter zu. Fehlt dieser, bleibt die Variable leer. - Validierung: Dem Vergleich vorangestellte Prüfung, ob beide Pfade existent und valide Verzeichnisse sind.
- Befehl: Der Kernbefehl ist
diff -rq.-rsorgt für den rekursiven Abgleich von Unterordnern.-qunterdrückt die detaillierte Anzeige der Zeilenunterschiede und meldet nur, dass eine Datei abweicht oder fehlt.
- Rückgabewert (Exit Code):
0: Die Verzeichnisse sind inhaltlich gleich.1: Es gibt Unterschiede.- Ermöglicht die Nutzung des Skripts in weiteren Automatisierungen (z. B. in CI/CD-Pipelines).
- Zur Anzeige detaillierter Unterschiede anstelle nur der reinen Meldung ist das
-qim Befehldiff -rqzu entfernen.
- Bedingte Umleitung:
- Mit Datei:
diff ... > "$OUTPUT_FILE"schreibt die Unterschiede direkt in die Datei. Das Terminal bleibt sauber und zeigt nur eine Zusammenfassung. - Ohne Datei: Die Ausgabe erfolgt wie gewohnt auf
stdout(dem Terminal).
- Mit Datei:
Verwendung
- Verwendung:
- Nur Terminal:
./skriptname.sh /pfad/zu/ordner1 /pfad/zu/ordner2 - Mit Datei:
./skriptname.sh /pfad/zu/ordner1 /pfad/zu/ordner2 unterschiede.txt
- Nur Terminal: