分页: 3 / 4
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 17:15
由 erol
成品,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
另外,实在没有用遍历的必要
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 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
接下来写生成列表的部分……
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 17:19
由 ルルティア

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

Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 17:22
由 ルルティア

31楼签名。。。难道是慧慧的马甲?
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 17:25
由 aerofox
其实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"
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 17:30
由 JiangHui
ルルティア 写了:
31楼签名。。。难道是慧慧的马甲?
我在29楼贴了一个脚本,怎么可能拿马甲再来贴一个
测试过了
姐控早说干嘛的不就完了吗,浪费一天时间
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 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
######################
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 18:35
由 ルルティア
对了,要是用慧慧那个还是得碰到sed问题,我要放在mp3里面,可能/和\还不一样。。
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 19:10
由 erol
ルルティア 写了:
被插楼了。。31楼的貌似有点复杂啊。。等会比较一下。。

就是用find把目录下的所有mp3文件找出来,然后放进对应的m3u文件,如果对应的m3u文件不存在则创建
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 19:10
由 sevk
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
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 20:52
由 ルルティア
好多方法啊,现在我纠结的是怎么把路径里面的"/"替换成"\",用sed的话
我这样写
但是运行时候会报错。。
代码: 全选
sed: -e expression #1, char 8: unterminated `s' command
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 21:02
由 Destine
树的遍历。。。嗯。。。深搜。
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 21:39
由 JiangHui
代码就不看了,要把 / 换成 \ 用vim就可以了
:%s/\//\\/g
vim可以批量操作多个文件
http://www.linuxsir.org/bbs/showthread.php?t=207886
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 22:00
由 aerofox
ルルティア 写了:好多方法啊,现在我纠结的是怎么把路径里面的"/"替换成"\",用sed的话
我这样写
但是运行时候会报错。。
代码: 全选
sed: -e expression #1, char 8: unterminated `s' command
这条命令我这运行很正常,
Re: 遍历目录的脚本老写不好,急躁。。
发表于 : 2010-07-11 22:20
由 aerofox
ルルティア 写了: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 语句,实话说,我没看出你想干什么。