multiple source dir support
This commit is contained in:
21
settings.ini
21
settings.ini
@@ -1,11 +1,22 @@
|
||||
[Paths]
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media/Filme/
|
||||
backup_dir=/home/thorsten/mnt/unRAID/Media/[0] Temp/Backup/Filme/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media/Filme/FSK 0/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media/Filme/FSK 6/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media/Filme/FSK 12/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media/Filme/FSK 16/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media/Filme/FSK 18/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media 2/TV Serien/FSK 0/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media 2/TV Serien/FSK 6/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media 2/TV Serien/FSK 12/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media 2/TV Serien/FSK 16/
|
||||
source_dir=/home/thorsten/mnt/unRAID/Media 2/TV Serien/FSK 18/
|
||||
|
||||
backup_dir_movies=/home/thorsten/mnt/unRAID/Media/[0] Temp/Backup/Filme/
|
||||
backup_dir_series=/home/thorsten/mnt/unRAID/Media/[0] Temp/Backup/Serien/
|
||||
|
||||
[Options]
|
||||
backup_actors=true
|
||||
backup_trickplay=true
|
||||
backup_trailer=true
|
||||
backup_actors=false
|
||||
backup_trickplay=false
|
||||
backup_trailer=false
|
||||
backup_banner=true
|
||||
backup_clearart=true
|
||||
backup_clearlogo=true
|
||||
|
||||
@@ -2,10 +2,19 @@
|
||||
|
||||
settings_file="./settings.ini"
|
||||
|
||||
# Start- und Zielordner als Variablen
|
||||
source_dir=$(sed -nr "/^\[Paths\]/ { :l /^source_dir[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
backup_dir=$(sed -nr "/^\[Paths\]/ { :l /^backup_dir[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
# Funktion zum Lesen der Pfade aus der settings.ini und Entfernen von Anführungszeichen
|
||||
read_source_dirs() {
|
||||
sed -nr "/^\[Paths\]/ { :l /^source_dir[ ]*=/ { s/[^=]*=[ ]*//; s/^\"//; s/\"$//; p; n; b l;}; n; b l;}" "$settings_file"
|
||||
}
|
||||
|
||||
# Start- und Zielordner als Variablen
|
||||
source_dirs=()
|
||||
while IFS= read -r line; do
|
||||
source_dirs+=("$line")
|
||||
done < <(read_source_dirs)
|
||||
|
||||
backup_dir_movies=$(sed -nr "/^\[Paths\]/ { :l /^backup_dir_movies[ ]*=/ { s/[^=]*=[ ]*//; s/^\"//; s/\"$//; p; q;}; n; b l;}" "$settings_file")
|
||||
backup_dir_series=$(sed -nr "/^\[Paths\]/ { :l /^backup_dir_series[ ]*=/ { s/[^=]*=[ ]*//; s/^\"//; s/\"$//; p; q;}; n; b l;}" "$settings_file")
|
||||
|
||||
# Sicherungsoptionen
|
||||
backup_actors=$(sed -nr "/^\[Options\]/ { :l /^backup_actors[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
@@ -21,8 +30,6 @@ backup_discart=$(sed -nr "/^\[Options\]/ { :l /^backup_discart[ ]*=/ { s/[^=]*=[
|
||||
backup_musictheme=$(sed -nr "/^\[Options\]/ { :l /^backup_musictheme[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
backup_nfo=$(sed -nr "/^\[Options\]/ { :l /^backup_nfo[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}" "$settings_file")
|
||||
|
||||
|
||||
|
||||
# Liste der Dateimuster pro Typ
|
||||
declare -A backup_patterns
|
||||
backup_patterns[trailer]="*-trailer.* *-sample.* *-scene.* *-clip.* *-interview.* *-behindthescenes.* *-deleted.* *-featurette.* *-extra.* trailer.* sample.* scene.* clip.* interview.* behindthescenes.* deleted.* featurette.* extra.*"
|
||||
@@ -42,7 +49,6 @@ backup_folders[actors]=".actors"
|
||||
backup_folders[trickplay]="*.trickplay"
|
||||
backup_folders[fanart]="*extrafanart"
|
||||
|
||||
|
||||
#colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;92m'
|
||||
@@ -56,16 +62,13 @@ NC='\033[0m' # No Color
|
||||
max_parallel=1
|
||||
current_jobs=0
|
||||
|
||||
# Prüfen, ob der Startordner existiert
|
||||
if [ ! -d "$source_dir" ]; then
|
||||
echo "Startordner existiert nicht: $source_dir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Prüfen, ob der Zielordner existiert, sonst erstellen
|
||||
if [ ! -d "$backup_dir" ]; then
|
||||
mkdir -p "$backup_dir"
|
||||
fi
|
||||
# Prüfen, ob die Startordner existieren
|
||||
for source_dir in "${source_dirs[@]}"; do
|
||||
if [ ! -d "$source_dir" ]; then
|
||||
echo "Startordner existiert nicht: $source_dir"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Funktion für das Erstellen eines Backups für Filme
|
||||
backup_movie_folder() {
|
||||
@@ -73,16 +76,20 @@ backup_movie_folder() {
|
||||
local movie_name
|
||||
local zip_file
|
||||
|
||||
# Prüfen, ob der Zielordner existiert, sonst erstellen
|
||||
if [ ! -d "$backup_dir_movies" ]; then
|
||||
mkdir -p "$backup_dir_movies"
|
||||
fi
|
||||
|
||||
# Filmname aus dem Ordnernamen ableiten
|
||||
movie_name=$(basename "$folder")
|
||||
zip_file="${backup_dir}/${movie_name}.zip"
|
||||
zip_file="${backup_dir_movies}/${movie_name}.zip"
|
||||
zip_file=$(echo "$zip_file" | sed 's|//|/|g')
|
||||
|
||||
echo -e "${BLACK_ON_WHITE} Backup erstellen ${NC} $zip_file"
|
||||
|
||||
# Prüfen, ob die ZIP-Datei bereits existiert und ggf. löschen
|
||||
if [ -f "$zip_file" ]; then
|
||||
#echo "Vorhandene ZIP-Datei gefunden. Lösche: $zip_file"
|
||||
rm -f "$zip_file"
|
||||
fi
|
||||
|
||||
@@ -115,8 +122,6 @@ backup_movie_folder() {
|
||||
zip -r "$zip_file" "${movie_name}" >/dev/null
|
||||
)
|
||||
|
||||
#echo "Backup erstellt: $zip_file"
|
||||
|
||||
# Temporären Ordner löschen
|
||||
rm -rf "$temp_dir"
|
||||
}
|
||||
@@ -127,16 +132,20 @@ backup_series_folder() {
|
||||
local series_name
|
||||
local zip_file
|
||||
|
||||
# Prüfen, ob der Zielordner existiert, sonst erstellen
|
||||
if [ ! -d "$backup_dir_series" ]; then
|
||||
mkdir -p "$backup_dir_series"
|
||||
fi
|
||||
|
||||
# Serienname aus dem Ordnernamen ableiten
|
||||
series_name=$(basename "$folder")
|
||||
zip_file="${backup_dir}/${series_name}.zip"
|
||||
zip_file="${backup_dir_series}/${series_name}.zip"
|
||||
zip_file=$(echo "$zip_file" | sed 's|//|/|g')
|
||||
|
||||
echo -e "${BLACK_ON_WHITE} Backup erstellen ${NC} $zip_file"
|
||||
|
||||
# Prüfen, ob die ZIP-Datei bereits existiert und ggf. löschen
|
||||
if [ -f "$zip_file" ]; then
|
||||
# echo "Vorhandene ZIP-Datei gefunden. Lösche: $zip_file"
|
||||
rm -f "$zip_file"
|
||||
fi
|
||||
|
||||
@@ -184,8 +193,6 @@ backup_series_folder() {
|
||||
zip -r "$zip_file" "${series_name}" >/dev/null
|
||||
)
|
||||
|
||||
#echo "Backup erstellt: $zip_file"
|
||||
|
||||
# Temporären Ordner löschen
|
||||
rm -rf "$temp_dir"
|
||||
}
|
||||
@@ -201,57 +208,62 @@ wait_for_jobs() {
|
||||
# Verarbeitung starten
|
||||
export -f backup_movie_folder
|
||||
export -f backup_series_folder
|
||||
export source_dir backup_dir backup_patterns backup_folders
|
||||
export backup_dir_movies backup_dir_series backup_patterns backup_folders
|
||||
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} TMM Media Backup ${NC}"
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo " "
|
||||
echo -e "${WHITE_ON_GRAY} Source Folder ${NC} ""$source_dir"""
|
||||
echo -e "${WHITE_ON_GRAY} Backup Folder ${NC} ""$backup_dir"""
|
||||
for i in "${!source_dirs[@]}"; do
|
||||
printf -v folder_number "%02d" "$((i+1))"
|
||||
echo -e "${WHITE_ON_GRAY} Source Folder $folder_number ${NC} ${source_dirs[$i]}"
|
||||
done
|
||||
echo " "
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo " "
|
||||
echo -e "${WHITE_ON_GRAY} Movies Backups ${NC} ""$backup_dir_movies"""
|
||||
echo -e "${WHITE_ON_GRAY} Series Backups ${NC} ""$backup_dir_series"""
|
||||
echo " "
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
|
||||
for source_dir in "${source_dirs[@]}"; do
|
||||
find "$source_dir" -type f \( -name "*.nfo" -o -name "tvshow.nfo" \) -print0 | \
|
||||
while IFS= read -r -d '' nfo_file; do
|
||||
folder=$(dirname "$nfo_file")
|
||||
|
||||
# Überspringe Ordner mit dem Namen ".deletedByTMM"
|
||||
if [[ "$folder" == *"/.deletedByTMM"* ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
find "$source_dir" -type f \( -name "*.nfo" -o -name "tvshow.nfo" \) -print0 | \
|
||||
while IFS= read -r -d '' nfo_file; do
|
||||
folder=$(dirname "$nfo_file")
|
||||
|
||||
# Überspringe Ordner mit dem Namen ".deletedByTMM"
|
||||
if [[ "$folder" == *"/.deletedByTMM"* ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ "$(basename "$nfo_file")" == "tvshow.nfo" ]]; then
|
||||
wait_for_jobs
|
||||
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} NFO gefunden ${NC} $nfo_file"
|
||||
echo -e "${BLACK_ON_WHITE} NFO Typ ${NC} Serie"
|
||||
|
||||
backup_series_folder "$folder"
|
||||
|
||||
echo -e "${BLACK_ON_WHITE} Abgeschlossen! ${NC} $(date +'%Y-%m-%d %H:%M:%S')"
|
||||
|
||||
else
|
||||
# Sicherstellen, dass keine Staffel-/Season- oder Specials-Ordner als eigenständige Filme behandelt werden
|
||||
if [[ "$folder" != *"/Staffel "* && "$folder" != *"/Season "* && "$folder" != *"/Specials"* ]]; then
|
||||
if [[ "$(basename "$nfo_file")" == "tvshow.nfo" ]]; then
|
||||
wait_for_jobs
|
||||
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} NFO gefunden ${NC} $nfo_file"
|
||||
echo -e "${BLACK_ON_WHITE} NFO Typ ${NC} Film"
|
||||
echo -e "${BLACK_ON_WHITE} NFO Typ ${NC} Serie"
|
||||
|
||||
backup_movie_folder "$folder"
|
||||
backup_series_folder "$folder"
|
||||
|
||||
echo -e "${BLACK_ON_WHITE} Abgeschlossen! ${NC} $(date +'%Y-%m-%d %H:%M:%S')"
|
||||
|
||||
else
|
||||
# Sicherstellen, dass keine Staffel-/Season- oder Specials-Ordner als eigenständige Filme behandelt werden
|
||||
if [[ "$folder" != *"/Staffel "* && "$folder" != *"/Season "* && "$folder" != *"/Specials"* ]]; then
|
||||
wait_for_jobs
|
||||
|
||||
echo "────────────────────────────────────────────────────────────────"
|
||||
echo -e "${BLACK_ON_WHITE} NFO gefunden ${NC} $nfo_file"
|
||||
echo -e "${BLACK_ON_WHITE} NFO Typ ${NC} Film"
|
||||
|
||||
backup_movie_folder "$folder"
|
||||
|
||||
echo -e "${BLACK_ON_WHITE} Abgeschlossen! ${NC} $(date +'%Y-%m-%d %H:%M:%S')"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
current_jobs=$((current_jobs + 1))
|
||||
current_jobs=$((current_jobs + 1))
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
|
||||
# Warte auf alle verbleibenden Prozesse
|
||||
wait
|
||||
|
||||
wait
|
||||
Reference in New Issue
Block a user