在目录和所有子目录中递归unrar和删除

时间:2015-04-19 15:08:22

标签: linux bash shell ubuntu unrar

我正在尝试处理将抓取我的Plex媒体文件夹的脚本,找到任何标题" .r00"文件,将它们提取到自己的目录中,并在完成后删除存档拉链。我有两个选择,我一直在玩。结合他们做我想要的,但我想把它全部放在一个漂亮的小脚本中。

选项1:

  • 此脚本打开" LinRAR" GUI,使我导航到特定目录,查找并提取该目录中的任何.r00文件,并成功删除所有存档拉链。

    while true; do
    if dir=$(zenity --title="LinRAR by dExIT" --file-selection --directory); then 
        if [[ ! -d $dir ]]; then
    echo "$dir: Wrong Directory" >&2
    else
    ( cd "$dir" && for f in *.r00; do [[ -f $f ]] || continue; rar e "$f" && rm "${f%00}"[0-9][0-9]; done )
    fi
    else
    echo "$bold Selection cancelled $bold_off" >&2
        exit 1
    fi
    zenity --title="What else...?" --question --text="More work to be done?" || break
    done
    

选项2:

  • 此脚本cd到我的Plex文件夹,以递归方式查找任何.r00文件,提取到我的/ home / user文件夹,并且不会删除存档拉链。

    (cd '/home/user/Plex');
     while [ "`find . -type f -name '*.r00' | wc -l`" -gt 0 ]; 
          do find -type f -name "*.r00" -exec rar e -- '{}' \; -exec rm -- '{}' \;; 
    done
    

我希望有一些能够获得第一个工作脚本的东西,并将递归查找应用于/ Plex内的所有文件夹,而不是仅让我通过" LinRAR"一次导航到一个文件夹。 GUI。

1 个答案:

答案 0 :(得分:0)

无需使用cdfind采用起始目录 这是你传递给它的点(.)。

还为find&添加了另一个(更理智的)替代方案。循环:

#!/bin/bash

while true; do
if dir=$(zenity --title="LinRAR by dExIT" --file-selection --directory); then 
    if [[ ! -d $dir ]]; then
        echo "$dir: Wrong Directory" >&2
    else
        # Alternative 1 - a little more comfortable
        files="$(find "${dir}" -type f -name '*.r00')"
        for file in ${files}; do
            rar e "${file}" && rm "${file}"
        done

        # Alternative 2 - based on your original code
        while [ "`find "${dir}" -type f -name '*.r00' | wc -l`" -gt 0 ]; do
            find "${dir}" -type f -name "*.r00" -exec rar e -- '{}' \; -exec rm -- '{}' \;;
        done
    fi
else
    echo "$bold Selection cancelled $bold_off" >&2
    exit 1
fi
zenity --title="What else...?" --question --text="More work to be done?" || break
done

根据评论,我运行了一个这个代码的小例子,它完全正常:

#!/bin/bash

if dir=$(zenity --title="LinRAR by dExIT" --file-selection --directory); then
    if [[ ! -d $dir ]]; then
        echo "$dir: Wrong directory" >&2
    else
        find $dir -type f
    fi
else
    echo "cancelled"
fi

成功挑选目录并打印所有文件。如果我选择以zenity取消,则会打印“已取消”。