分页: 3 / 6

发表于 : 2005-08-30 16:05
yonsan
:o 汗 !发现一个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

代码: 全选

sed -e 's/"/\'/g'
改成

代码: 全选

sed -e "s/\"/'/g"

发表于 : 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的文件,会陷入死循环。不过已经按照你的思路修改完毕。
:o 测试发现确实如你所说, 我的文件修改成以下形式了! 一叶,帮忙看看还可能出现其它问题没? 测试过程还算通过,但最怕就是逻辑错误!

代码: 全选

#优先下载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