LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 868|回复: 3

如何使用使用BASH编程实现下面的这个MP3管理功能?

[复制链接]
发表于 2005-5-24 02:36:08 | 显示全部楼层 |阅读模式
我有大量的管理的很好的MP3,每个末级文件夹就是一张专辑,而且多半文件夹下还有该专辑的封面快照(都是JPG格式的),但是命名不规范,一般为folder.jpg, Folder.JPG等。

现在使用apache的mod_musicindex实现HTTP的MP3流媒体点播,而且mod_musicindex可以自动将当前文件夹下的"cover.jpg"作为专辑的页面生成在点播的HTML页面中。我不想极度痛苦的进入每个文件夹看有没有.jpg文件,有则重命名为"cover.jpg",于是想用BASH编程实现这个目的。开始想用find -exec来实现,但是没有成功,大家有什么好主意吗?
发表于 2005-5-24 04:25:41 | 显示全部楼层
关注 这个我也想知道
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-24 15:36:14 | 显示全部楼层
终于搞定,好歹能用了。下面是脚本,最麻烦的地方就是对文件名中的特殊字符的转义和正则匹配了。而且中文文件名和中文目录也没有测试(我的都是英文歌曲)。


  1. #! /bin/bash

  2. OLD_IFS=$IFS
  3. IFS=$'\n'

  4. for i in `find . -type f -name "*.jpg"`
  5. do
  6.         echo Finding  $i now....
  7.         before=`echo $i | sed -r 's/\ /\\ /g; s/\(/\\(/g; s/\)/\\)/g'`
  8.         after=`echo $before | sed -r 's/\/{1}[^\/]*.jpg$/\/cover.jpg/g'`
  9.         echo Before:
  10.         echo $before
  11.         echo After:
  12.         echo $after
  13.         if test -f $after
  14.         then
  15.                 echo We already have one here, give up.....
  16.         else
  17.                 echo Renaming.....
  18.                 cp -f $before $after
  19.         fi
  20. done

  21. IFS=$OLD_IFS
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-24 22:30:26 | 显示全部楼层
1)

  1. for FILE in `find . -type f -name '*.[jJ][pP][gG]' -print`;
  2. do
  3. BASE=`basename $FILE`
  4. FILENAME=`echo $FILE|sed s/$BASE/cover.jpg/`
  5. mv $FILE $FILENAME
  6. done
复制代码

2)

  1. for FILE in `find . -type f -name '*.[jJ][pP][gG]' -print`
  2. do
  3. BASE=`basename $FILE`
  4. mv $FILE `echo $FILE|sed s/$BASE/cover.jpg/`
  5. done
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表