Initial commit

This commit is contained in:
Philipp Korylec
2025-04-03 10:24:15 +02:00
commit d52bd9aaaf
2 changed files with 244 additions and 0 deletions
Executable
+230
View File
@@ -0,0 +1,230 @@
#!/bin/bash
clear
cat << "EOF"
__ ___ ____
/ |/ /___ / __ \____ _
/ /|_/ / __ \/ /_/ / __ `/
/ / / / /_/ / ____/ /_/ /
/_/ _/_/\____/_/ \__,_/_
/ / ____ ____ _____/ /__ _____
/ / / __ \/ __ `/ __ / _ \/ ___/
/ /__/ /_/ / /_/ / /_/ / __/ /
/_____|____/\__,_/\__,_/\___/_/
v0.1BETA
by MoPa Ltd
EOF
#!/bin/bash
# .env-Datei laden, falls vorhanden
if [ -f .env ]; then
export $(grep -v '^#' .env | xargs)
fi
# Basis-URL aus der .env Datei
if [ -z "$BASE_URL" ]; then
echo "BASE_URL ist nicht gesetzt. Bitte in der .env Datei festlegen."
exit 1
fi
# Sicherstellen, dass BASE_URL mit / endet
if [[ ! "$BASE_URL" =~ /$ ]]; then
BASE_URL="$BASE_URL/"
fi
# Funktion zum Generieren des JSON
update_json() {
# HTML-Inhalt abrufen
HTML_CONTENT=$(curl -s -u "$USERNAME:$PASSWORD" "$BASE_URL")
# Alle Ordnernamen extrahieren
DIRS=($(echo "$HTML_CONTENT" | grep -o 'href="[^"]*/"'))
# JSON-Daten initialisieren
JSON_OUTPUT="{\n \"folders\": ["
# Verarbeiten der Ordner
for dir in "${DIRS[@]}"; do
# Entferne das href=" und "
dir=$(echo "$dir" | sed 's/href="\([^"]*\)"/\1/')
# Entschlüsselte Version des Ordnernamens (schöner Name)
readable_dir=$(echo "$dir" | sed 's/%20/ /g; s/%28/(/g; s/%29/)/g')
# Überprüfen, ob der Pfad mit einem / endet und ggf. hinzufügen
if [[ ! "$dir" =~ /$ ]]; then
dir="$dir/"
fi
# Vollständige URL mit Pfad erstellen
FULL_URL="$BASE_URL$dir"
echo "Verarbeite Ordner: $FULL_URL"
# Dateien im Ordner finden
FILES=($(curl -s -u "$USERNAME:$PASSWORD" "$FULL_URL" | grep -o 'href="[^"]*\.\(mp4\|mkv\|avi\|mov\|flv\)"' | sed 's/href="\([^"]*\)"/\1/'))
# Falls Dateien gefunden wurden
if [ ${#FILES[@]} -gt 0 ]; then
echo "Gefundene Dateien im Ordner '$dir':"
for file in "${FILES[@]}"; do
echo "$file"
done
# Ordner-JSON hinzufügen
JSON_OUTPUT+="{\n \"name\": \"$readable_dir\",\n \"files\": ["
# Dateien-JSON hinzufügen
for file in "${FILES[@]}"; do
full_file_url="$BASE_URL$dir$file"
JSON_OUTPUT+="{\n \"file\": \"$file\",\n \"url\": \"$full_file_url\"\n },"
done
# Letztes Komma entfernen und Ordner-JSON abschließen
JSON_OUTPUT=$(echo "$JSON_OUTPUT" | sed '$s/,$/\n ]/' )
JSON_OUTPUT+=" },"
else
echo "Keine Dateien im Ordner '$dir' gefunden."
fi
done
# Letztes Komma entfernen und JSON abschließen
JSON_OUTPUT=$(echo "$JSON_OUTPUT" | sed '$s/,$/\n ]/' )
JSON_OUTPUT+="}"
# JSON speichern
echo -e "$JSON_OUTPUT" > output.json
echo "Daten gespeichert in output.json"
}
# Funktion zum Auflisten der Ordnernamen
list_folder_names() {
if [ -f "output.json" ]; then
folder_names=$(jq -r '.folders[].name' output.json)
if [ -n "$folder_names" ]; then
echo "Ordnernamen:"
echo "$folder_names"
else
echo "Keine Ordnernamen im JSON gefunden."
fi
else
echo "Die Datei output.json existiert nicht."
fi
}
# Funktion zur Ordnersuche
search_folder() {
if [ -z "$2" ]; then
echo "Bitte einen Suchbegriff angeben."
exit 1
fi
if [ ! -f "output.json" ]; then
echo "Die Datei output.json existiert nicht."
exit 1
fi
results=$(jq -r --arg search "$2" '.folders[].name | select(test($search; "i"))' output.json)
if [ -z "$results" ]; then
echo "Keine passenden Ordner gefunden."
else
echo "🔎 Gefundene Ordner:"
count=1
while IFS= read -r line; do
if [ $(echo "$results" | wc -l) -gt 1 ]; then
echo "${count}️⃣ $line"
count=$((count + 1))
else
echo "$line"
fi
done <<< "$results"
fi
}
# Funktion zum Herunterladen einer Datei
download_file() {
if [ -z "$2" ]; then
echo "Bitte einen Suchbegriff angeben."
exit 1
fi
if [ ! -f "output.json" ]; then
echo "Die Datei output.json existiert nicht."
exit 1
fi
# Wenn DOWNLOAD_LOCATION nicht gesetzt, nach dem Zielordner fragen
DOWNLOAD_LOCATION=${DOWNLOAD_LOCATION:-$(read -p "Bitte Zielordner für den Download angeben (Standard: .): " loc; echo ${loc:-.})}
results=$(jq -r --arg search "$2" '.folders[] | select(.name | test($search; "i"))' output.json)
if [ -z "$results" ]; then
echo "Keine passenden Dateien gefunden."
exit 1
fi
matched_files=($(echo "$results" | jq -r '.files[].url'))
matched_names=($(echo "$results" | jq -r '.files[].file'))
if [ ${#matched_files[@]} -eq 1 ]; then
file_url=${matched_files[0]}
file_name=${matched_names[0]}
read -p "Soll '$file_name' in '$DOWNLOAD_LOCATION' heruntergeladen werden? (J/n, Standard: J) " choice
choice=${choice:-J}
if [[ "$choice" =~ ^[Jj]$ ]]; then
wget --user="$USERNAME" --password="$PASSWORD" --auth-no-challenge "$file_url" -O "$DOWNLOAD_LOCATION/$file_name"
echo "Download abgeschlossen: $file_name"
else
echo "Download abgebrochen."
fi
else
echo "🔎 Gefundene Dateien:"
count=1
for file in "${matched_names[@]}"; do
echo "${count}️⃣ $file"
count=$((count + 1))
done
read -p "Gib die Zahl der Datei ein, die du herunterladen möchtest: " selection
if [[ "$selection" =~ ^[0-9]+$ ]] && [ "$selection" -le ${#matched_files[@]} ]; then
index=$((selection - 1))
file_url=${matched_files[$index]}
file_name=${matched_names[$index]}
read -p "Soll '$file_name' in '$DOWNLOAD_LOCATION' heruntergeladen werden? (J/n, Standard: J) " choice
choice=${choice:-J}
if [[ "$choice" =~ ^[Jj]$ ]]; then
wget --user="$USERNAME" --password="$PASSWORD" --auth-no-challenge "$file_url" -O "$DOWNLOAD_LOCATION/$file_name"
echo "Download abgeschlossen: $file_name"
else
echo "Download abgebrochen."
fi
else
echo "Ungültige Auswahl."
fi
fi
}
# Aliase hinzufügen
alias dl="download_file"
case "$1" in
"update")
update_json
;;
"list")
list_folder_names
;;
"search")
search_folder "$@"
;;
"download"|"dl")
download_file "$@"
;;
*)
echo "Verwendung: $0 {update|list|search <Suchbegriff>|download <Suchbegriff>}"
exit 1
;;
esac