sh/bash/dash/ksh/zsh等Shell脚本
-
erol
- 帖子: 61
- 注册时间: 2010-05-16 23:17
#31
帖子
由 erol » 2010-07-11 17:15
成品,m3u里带#的,除了第一行都可以不要,因为不知道怎么获得歌曲长度,就不加了
第一个参数为要处理的目录路径,第二个参数为保存m3u的目录路径
代码: 全选
#!/bin/bash
#***第一个参数为要处理的目录路径,第二个参数为保存m3u的目录路径***
if [ ! -d "$1" ];then
echo "$1 is not a folder"
exit 2
fi
if [ ! -d "$2" ];then
echo "$2 is not a folder, now create it"
mkdir -p "$2"
if [ "$?" -ne 0 ];then
echo "can't create $2"
exit 3
fi
fi
find "$1" -type f -name '*.mp3' | while read line
do
line2=`dirname "$line"`
nameofplaylist="$2"/playlist-`basename "$line2"`.m3u
if [ ! -f "$nameofplaylist" ];then
echo "#EXTM3U"> "$nameofplaylist"
fi
echo "$line">>"$nameofplaylist"
done
exit 0
另外,实在没有用遍历的必要
伊吹风子的邻居常说:那孩子是个普通的地球人
-
ルルティア
- 帖子: 1077
- 注册时间: 2010-05-23 17:10
#32
帖子
由 ルルティア » 2010-07-11 17:17
哈哈,遍历成功,多谢大家鼎力相助!
代码: 全选
#!/bin/sh
IFS='
'
dirscan()
{
ls -1 $1 | while read filename
do
if [ -d "$filename" ]; then
cd "$filename"
temp=`pwd`
dirscan "$temp"
cd ..
else
echo $filename
fi
done
}
cd $1
dirscan "$1"
unset IFS
接下来写生成列表的部分……
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
-
ルルティア
- 帖子: 1077
- 注册时间: 2010-05-23 17:10
#33
帖子
由 ルルティア » 2010-07-11 17:19

被插楼了。。31楼的貌似有点复杂啊。。等会比较一下。。

everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
-
ルルティア
- 帖子: 1077
- 注册时间: 2010-05-23 17:10
#34
帖子
由 ルルティア » 2010-07-11 17:22

31楼签名。。。难道是慧慧的马甲?
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#35
帖子
由 aerofox » 2010-07-11 17:25
其实10楼JiangHui贴的脚本就差两处引号吧。
代码: 全选
#!/bin/sh
dirscan()
{
for filename in *; do
if [ -d "$filename" ]; then
cd $filename
dirscan "$(pwd)/${filename}" # 这里原来漏了引号,导致遍历不成功。$(pwd)/ 可省略。
cd ..
else
echo "$filename" # 这里原来也漏了引号,但不会导致遍历问题。
fi
done
}
cd $1
dirscan "$1"
-
JiangHui
- 论坛版主
- 帖子: 21308
- 注册时间: 2007-08-02 20:29
- 系统: 窓辺とうこ
#36
帖子
由 JiangHui » 2010-07-11 17:30
ルルティア 写了:
31楼签名。。。难道是慧慧的马甲?
我在29楼贴了一个脚本,怎么可能拿马甲再来贴一个
测试过了
姐控早说干嘛的不就完了吗,浪费一天时间
-
ルルティア
- 帖子: 1077
- 注册时间: 2010-05-23 17:10
#37
帖子
由 ルルティア » 2010-07-11 18:14
aerofox, 我试了,不知道怎么回事,竟然出现死循环了。。
慧慧那个看起来不错,待会儿我试一下,大家先帮我看看我这个哪里出问题了啊,主要是生成列表那里,还有那个sed替换。。遍历没问题,已经测试过了
代码: 全选
#!/bin/sh
IFS='
'
dirscan()
{
ls -1 $1 | while read filename
do
if [ -d "$filename" ]; then
cd "$filename"
# temp=`pwd`
# dirscan "$temp"
dirscan `pwd`
cd ..
else
path=`pwd | sed 's/'/'/'\'/'`
echo "#EXTM3U\n#EXTINF:0,${filename}\n${path}\\${filename}" >> ${savepath}/`$(pwd).m3u`
fi
done
}
savepath=`pwd`
cd $1
dirscan "$1"
unset IFS
######################
# 列表样本
# #EXTM3U
# #EXTINF:0,05.With An Orchid.mp3
# \Users\acer\Music\Music\melody\Yanni\05.With An Orchid.mp3
######################
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
-
ルルティア
- 帖子: 1077
- 注册时间: 2010-05-23 17:10
#38
帖子
由 ルルティア » 2010-07-11 18:35
对了,要是用慧慧那个还是得碰到sed问题,我要放在mp3里面,可能/和\还不一样。。
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
-
erol
- 帖子: 61
- 注册时间: 2010-05-16 23:17
#39
帖子
由 erol » 2010-07-11 19:10
ルルティア 写了:
被插楼了。。31楼的貌似有点复杂啊。。等会比较一下。。

就是用find把目录下的所有mp3文件找出来,然后放进对应的m3u文件,如果对应的m3u文件不存在则创建
伊吹风子的邻居常说:那孩子是个普通的地球人
-
sevk
- 帖子: 2060
- 注册时间: 2007-05-08 16:26
- 系统: arch
- 来自: 火星内核某分子内某原子核内
-
联系:
#40
帖子
由 sevk » 2010-07-11 19:10
ruby实现:
代码: 全选
#!/usr/bin/env ruby
# coding: utf-8
# [email protected]
require 'find'
alias echo puts #添加一个echo方法 :)
def dirscan(dir=ARGV[0])
Find.find(dir) do |f|
if File.directory? f
dirscan dir + f
else
echo f
end
end
end
if ARGV[0]
dirscan
else
puts "用法: dirscan.rb . "
end
上次由
sevk 在 2010-07-12 15:39,总共编辑 1 次。
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
-
ルルティア
- 帖子: 1077
- 注册时间: 2010-05-23 17:10
#41
帖子
由 ルルティア » 2010-07-11 20:52
好多方法啊,现在我纠结的是怎么把路径里面的"/"替换成"\",用sed的话
我这样写
但是运行时候会报错。。
代码: 全选
sed: -e expression #1, char 8: unterminated `s' command
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
-
Destine
- 论坛版主
- 帖子: 568
- 注册时间: 2009-05-05 20:45
#42
帖子
由 Destine » 2010-07-11 21:02
树的遍历。。。嗯。。。深搜。
The world never lacks miracles.
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#44
帖子
由 aerofox » 2010-07-11 22:00
ルルティア 写了:好多方法啊,现在我纠结的是怎么把路径里面的"/"替换成"\",用sed的话
我这样写
但是运行时候会报错。。
代码: 全选
sed: -e expression #1, char 8: unterminated `s' command
这条命令我这运行很正常,
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#45
帖子
由 aerofox » 2010-07-11 22:20
ルルティア 写了:aerofox, 我试了,不知道怎么回事,竟然出现死循环了。。
慧慧那个看起来不错,待会儿我试一下,大家先帮我看看我这个哪里出问题了啊,主要是生成列表那里,还有那个sed替换。。遍历没问题,已经测试过了
代码: 全选
#!/bin/sh
IFS='
'
dirscan()
{
ls -1 $1 | while read filename
do
if [ -d "$filename" ]; then
cd "$filename"
# temp=`pwd`
# dirscan "$temp"
dirscan `pwd`
cd ..
else
path=`pwd | sed 's/'/'/'\'/'`
echo "#EXTM3U\n#EXTINF:0,${filename}\n${path}\\${filename}" >> ${savepath}/`$(pwd).m3u`
fi
done
}
savepath=`pwd`
cd $1
dirscan "$1"
unset IFS
######################
# 列表样本
# #EXTM3U
# #EXTINF:0,05.With An Orchid.mp3
# \Users\acer\Music\Music\melody\Yanni\05.With An Orchid.mp3
######################
遍历应该会遇到问题的。
代码: 全选
ls -1 $1 | while read filename
$1没加引号,如果第一个参数是 "a sub dir",问题就来了。如果是 "* important" 这样的变态名字,问题就更大了。
那条 sed 语句,实话说,我没看出你想干什么。