LinuxSir.cn,穿越时空的Linuxsir!

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

创建播放列表出现的问题

[复制链接]
发表于 2007-10-2 10:20:52 | 显示全部楼层 |阅读模式
小弟写了段创建播放列表的脚本(目的在于练习啊,所以难免有所罗嗦)
如下:
#!/bin/bash
if [ -e “~/Music/playlist/all” ]
then
rm ~/Music/playlist/all
fi
Var=`ls -R /mnt/document/music/`
for i in $Var
do
if [ "${i##*.}" = "mp3" ]
then
echo $i>>~/Music/playlist/all
fi
done

结果显示有如下问题:
1.碰到带有空格的文件名,比如fade to black.mp3,那么结果只返回black.mp3
2.如果想在文件名前面再加上绝对路径该怎么做呢,这个显示出来没有绝对路径
望各位帮忙看看
发表于 2007-10-2 13:05:49 | 显示全部楼层
在Var=`ls -R /mnt/document/music/`中,遇到带有空格的文件名时会按照空格分成几个元素,因此这里不能这么处理。

可以通过将echo $i变为echo "/mnt/document/music/$i"加上绝对路径,用""包含$变量是处理包含空格的变量的一种方法。

实现这个功能可以简单地利用find实现
  1. #!/bin/sh
  2. rm -f ~/Music/playlist/all
  3. find /mnt/document/music -name "*.mp3" >> ~/Music/playlist/all
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-2 15:14:56 | 显示全部楼层
多谢指点:)
可是我的音乐文件不在同一个文件夹里,所以要是直接echo "/mnt/documet/music/$i"解决的话会出错
因为可能有的文件还在下一层目录里,我想用dirname解决,可是没解决了
回复 支持 反对

使用道具 举报

发表于 2007-10-4 15:19:20 | 显示全部楼层
Var=`ls -R /mnt/document/music/`
for i in $Var


ls -R /mnt/document/music/| while read i
代替
区别在于原来空格会把文件名断开, 用这个每次读入一行.
不过如果文件名带存在换行/回车则还是会有问题.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-4 22:22:42 | 显示全部楼层
多谢,
明天试一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-6 12:53:32 | 显示全部楼层
文件名弄好了
#!/bin/bash
if [ -e “~/Music/playlist/all” ]
then
rm ~/Music/playlist/all
fi
ls -R /mnt/document/music/|while read i
do
if [ "${i##*.}" = "mp3" ]
then
echo $i>>~/Music/playlist/all
fi
done
可是还需要解决绝对路径问题
回复 支持 反对

使用道具 举报

发表于 2007-10-6 15:10:53 | 显示全部楼层
可以说,你用的工具不对,  所以显得很困难.
用HuiCai的方法的话, 一行搞定.
不然的话就用递归:

  1. #!/bin/bash
  2. inandgetfile()
  3. {
  4.     for i in *.mp3
  5.     do
  6.         [ "$i" == '*.mp3' ] && break
  7.         echo "$PWD/$i"
  8.     done
  9.     for i in */
  10.     do
  11.         [ "$i" == '*/' ] && break
  12.         cd "$i"
  13.         inandgetfile
  14.         cd ..
  15.     done
  16. }
  17. cd /mnt/document/music/
  18. inandgetfile >~/Music/playlist/all
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-7 10:28:58 | 显示全部楼层
确实是这么回事,只怪自己学的太少,学了什么就想一直用那个。
lastart和huicai,多谢二位指点了,
find命令是应该好好学学,用这么长时间linux,就没用过find呀,哎
另外lastart的递归也值得我好好学学,还不懂呢:)

再次谢谢了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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