Das Konzept
Ich kämpfe jetzt schon seit einiger Zeit mit einem Skript, das ausgeführt wird, wenn rTorrent einen Download abgeschlossen hat. Das Skript sollte das dritte Argument von rTorrent prüfen und entsprechend reagieren.
.rtorrent.rc:
system.method.set_key = event.download.finished,unrar_move_files,"execute={/home/holmen/script/testrt.sh,$d.get_base_path=,$d.get_name=,$d.get_custom1=}"
Das Skript sieht folgendermaßen aus:
#!/bin/bash
# First, copy the downloaded material to the storage drive
# then unpack the files (if the unrar returned successful)
# lastly remove the rar files with rm -rfv command
hdfilm1=/media/store1/HD-film
hdfilm2=/media/store2/HD-film
download=/media/store3/Download
# Copy the downloaded material to correct storage drive
rsync -r --info=progress2 "$download"/"$2" "$3"
if [ "$3" = "$hdfilm1" ] || [ "$3" = "$hdfilm2" ]; then
# Check folders and subfolders of the downloaded material
while IFS= read -r dir; do
# Find and unpack archive files
if [ "$(find $dir | egrep -i '\.r00|\.001|part01\.rar|part001\.rar|subs\.rar')" ]; then
rarFile=`ls $dir | egrep -i '\.r00|\.001|part01\.rar|part001\.rar|subs\.rar'`;
searchPath="$dir/$rarFile"
yes no | nice -n 15 unrar x -o+ "$searchPath" "$dir"
remFile=`ls $dir | egrep -i '\.(rar|sfv|r([0-9]{2}))$'`;
remPath="$dir/$remFile"
rm -rfv $remPath
fi
done < <(find "$3"/"$2" -type d)
fi
Das funktioniert grundsätzlich, aber ich habe Probleme beim Löschen der Archivdateien (nachdem sie entpackt wurden). Wenn ich ein Löschskript in die while
Schleife einfüge, entfernt das Skript nur die Dateien in dem spezifischen Unterordner, in dem es sich gerade befindet.
Das Skript entpackt:
/media/store1/HD-film/Movie.folder/*.rar
/media/store1/HD-film/Movie.folder/Subs/*.rar
entfernt aber nur die RAR-Dateien in diesem Ordner
/media/store1/HD-film/Movie.folder/Subs/
Wie kann ich das Problem beheben, sodass mein Skript auch die Archivdateien im übergeordneten Ordner entfernt?
Bearbeiten:Ich habe versucht, den rm
Befehl nach dem Unrar-Befehl einzufügen, &&
aber das Ergebnis ist dasselbe.
if [ "$(find $dir | egrep -i '\.r00|\.001|part01\.rar|part001\.rar|subs\.rar')" ]; then
rarFile=`ls $dir | egrep -i '\.r00|\.001|part01\.rar|part001\.rar|subs\.rar'`;
searchPath="$dir/$rarFile"
remFile=`ls $dir | egrep -i '\.(rar|sfv|r([0-9]{2}))$'`;
remove="$dir/$remFile"
yes no | nice -n 15 unrar x -o+ "$searchPath" "$dir" && rm -rfv "$remove"
fi
Antwort1
Ich habe mit diesem Skript eine Lösung für mein Problem gefundeneinzigartig. Ich habe es in meinem Skript implementiert.
#!/bin/bash
# Variables
hdfilm1=/media/store1/HD-film
hdfilm2=/media/store2/HD-film
tvshow1=/media/store0/Serier
tvshow2=/media/store2/Serier
download=/media/store3/Download
# Copy the downloaded material to correct storage drive
rsync -r --info=progress2 "$download"/"$2" "$3"
if [ "$3" = "$hdfilm1" ] || [ "$3" = "$hdfilm2" ] || [ "$3" = "$tvshow1" ] || [ "$3" = "$tvshow2" ]; then
/home/holmen/script/unrarall --clean=rar,proof_folders,sample_folders,sample_videos,empty_folders "$3"/"$2"
fi