分页: 3 / 6
发表于 : 2005-08-30 16:05
由 yonsan

汗 !发现一个bug, 歌名中有空格出现删除不了,将歌名中的所有空格都用下划线代替解决了.
代码: 全选
#******************************************************************************
# FIXME: 在脚本中用rm不能删除文件名中带空格的文件。
# TODO : 在以下语句中添加 sed 's/ /_/g' 可以解决。
#将文件名中的空格换成_(即Baby ,Baby tell me-王心凌改为Baby_,Baby_tell_me-王心凌)
#******************************************************************************
name=$(echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' | sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | [color=red]sed 's/ /_/g'[/color] | cat);
发表于 : 2005-08-30 16:55
由 oneleaf
文件名加上 "" 就可以了。
发表于 : 2005-08-31 21:09
由 Jeff W
/tmp里面的临时文件有必要加上用户名吧。不然不同用户的就搞混了
发表于 : 2005-09-13 13:43
由 firehare
一叶兄,在运行脚本时,如果所有MP3都已经被下载时,会有以下提示出现:
rm: 无法删除‘/tmp/down.html’: 没有那个文件或目录
rm: 无法删除‘/tmp/down.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/size.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_size.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_size_sort.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/temp.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_mp3.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_wma.txt’: 没有那个文件或目录
是否应加上相应的判断语句?
发表于 : 2005-09-13 13:47
由 oneleaf
呵呵,早就修改了,你重新试试脚本。
发表于 : 2005-09-13 23:12
由 firehare
O!
呵呵!OK!
发表于 : 2005-09-13 23:29
由 firehare
代码: 全选
./dlmp3: command substitution: line 77: unexpected EOF while looking for matching `''
./dlmp3: command substitution: line 78: syntax error: unexpected end of file
发现 下载过,忽略,继续下一首。
不知是否正常?
发表于 : 2005-09-13 23:56
由 oneleaf
能不能贴出你的77和78行看看?
发表于 : 2005-09-14 1:05
由 yonsan
oneleaf 写了:
代码: 全选
name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' |\
sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g' | [color=red]sed -e 's/"/\'/g'[/color] | cat`
#检查是否已经下载过这首歌,如果下载过,放弃
以上的第76 77 78行! 请看加了红色的部分
发表于 : 2005-09-14 8:33
由 oneleaf
我这个语法是将 " 替换为 ‘ 也应该没有多大问题啊
发表于 : 2005-09-14 9:17
由 yonsan
发表于 : 2005-09-14 16:20
由 firehare
oneleaf 写了:能不能贴出你的77和78行看看?
代码: 全选
sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g' | sed -e 's/"/\'/g' | cat`
's/"/\' ??
Re: 自动下载百度新歌的脚本
发表于 : 2005-09-16 8:38
由 yonsan
oneleaf 写了:
代码: 全选
# 优先下载mp3格式的歌曲
while((j<=downline_mp3)); do
mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt`
echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
downed=1;
break;
[color=red] else
rm "${TMP}/${name}.mp3";
((j++))
fi
else
((j++))[/color]
fi
done
一叶, 将以上这一部分修改成以下形式,如何?
代码: 全选
# 优先下载mp3格式的歌曲
while((j<=downline_mp3)); do
mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt`
echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
downed=1;
break;
[color=red] fi
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.mp3";
((j++))[/color]
fi
done
发表于 : 2005-09-16 8:50
由 oneleaf
这样修改有个逻辑问题。如果下载成功但检查出来不是mp3的文件,会陷入死循环。不过已经按照你的思路修改完毕。
发表于 : 2005-09-16 10:48
由 yonsan
oneleaf 写了:这样修改有个逻辑问题。如果下载成功但检查出来不是mp3的文件,会陷入死循环。不过已经按照你的思路修改完毕。

测试发现确实如你所说, 我的文件修改成以下形式了! 一叶,帮忙看看还可能出现其它问题没? 测试过程还算通过,但最怕就是逻辑错误!
代码: 全选
#优先下载mp3格式的歌曲
while((j<=downline_mp3));
do
mp3=$(awk 'NR=='"$j"'' ${SAVE}/down_mp3.txt);
echo -e "\e[1;6m\e[1;34m正在下载${name}.mp3 ... \e[1;6m\e[00m";
#如果文件已经存在则略过,不会覆盖已经存在的文件
wget --no-clobber --no-directories --timeout=${TIMEOUT} --tries=${TRYCOUNT} $mp3 -O "${SAVE}/${name}.mp3";
#若$?不等于0,则下载失败.
if [ "$?" -ne 0 ];
then
echo -e "\e[1;6m\e[1;31m发现 ${name}.mp3 文件无效,正在删除重新下载...\e[1;6m\e[00m";
rm -Rfv "${SAVE}/${name}.mp3";
fi
#歌曲下载完毕标记
downed=1;
#如果下载文件是有效的mp3则转向下载其它歌
if [ $(file -ib "${SAVE}/${name}.mp3" | sed -e 's/\/.*//g') = "audio" ];
then
echo -e "\e[1;6m\e[1;31m检测 ${name}.mp3 文件有效,转向下载其它歌曲...\e[1;6m\e[00m";
break;
else
echo -e "\e[1;6m\e[1;31m发现 ${name}.mp3 文件无效,正在删除重新下载...\e[1;6m\e[00m";
rm -Rfv "${SAVE}/${name}.mp3";
#使用同一首歌的下一个有效地址重新下载
((j++));
downed=0
fi
done