Скрипт для перемещения или распаковки файлов (rtorrent после завершения скрипта)

854
junkyhlm

Концепт

Поэтому я некоторое время боролся со сценарием, который запустится, когда rtorrent закончит загрузку. Скрипт должен проверить третий аргумент от rtorrent и действовать соответственно.

.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=}" 

Сценарий выглядит так:

#!/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]))$'`; remPath="$dir/$remFile" rm -rfv $remPath fi done < <(find "$3"/"$2" -type d) fi 

Это работает в основном, но у меня возникают проблемы при попытке удалить архивные файлы (после того, как они распакованы). При добавлении сценария удаления в whileцикл сценарий просто удаляет файлы в определенной подпапке, в которой он находится в данный момент.

Скрипт распаковывает:

/media/store1/HD-film/Movie.folder/*.rar /media/store1/HD-film/Movie.folder/Subs/*.rar 

но только удаляет RAR-файлы в этой папке

/media/store1/HD-film/Movie.folder/Subs/ 

Как это исправить, чтобы мой скрипт удалял архивные файлы также в родительской папке?

Изменить: я пытался поставить rmкоманду после команды unrar с, &&но результат тот же.

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]))$'`; remove="$dir/$remFile" yes no | nice -n 15 unrar x -o+ "$searchPath" "$dir" && rm -rfv "$remove" fi 
0
Как вы пытаетесь удалить RAR файлы? Было бы лучше включить это в размещенный код. janos 7 лет назад 0
Я добавил этот код в раздел if цикла while: remFile = `ls $ dir | egrep -i '\. [r | s | 0-9] [a | f | 0-9] [r | v | 0-9] $' `; remPath = "$ реж / $ remFile"; rm -rfv $ remPath junkyhlm 7 лет назад 0
Было бы лучше отредактировать это в вашем вопросе janos 7 лет назад 0
Я отредактировал свой вопрос junkyhlm 7 лет назад 0

1 ответ на вопрос

0
junkyhlm

Я нашел решение для моей проблемы с этим скриптом unrarall . Я реализовал это в моем сценарии.

#!/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 

Похожие вопросы