我正在尝试处理将抓取我的Plex媒体文件夹的脚本,找到任何标题" .r00"文件,将它们提取到自己的目录中,并在完成后删除存档拉链。我有两个选择,我一直在玩。结合他们做我想要的,但我想把它全部放在一个漂亮的小脚本中。
此脚本打开" 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
此脚本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。
答案 0 :(得分:0)
无需使用cd
。 find
采用起始目录
这是你传递给它的点(.
)。
还为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取消,则会打印“已取消”。