【已解决】遍历目录的脚本老写不好,急躁【写了一个魅族M3用的播放列表制作工具】

sh/bash/dash/ksh/zsh等Shell脚本
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

【已解决】遍历目录的脚本老写不好,急躁【写了一个魅族M3用的播放列表制作工具】

#1

帖子 ルルティア » 2010-07-11 9:29

更新:
多谢大家帮助!脚本如下

代码: 全选

#!/bin/bash
IFS='
'
dirscan()
{
ls -1 "$1" | while read filename
do
	if [ -d "$filename" ]; then
		cd "$filename"
		dirscan `pwd`
		cd ..
	else
		path="${PWD//\//\\}"
		path="${path//\\media\\MUSIC\ CARD/}"
		listname=$(basename "`pwd`").M3U
		pathnname="${savepath}/${listname}"
		[ ! -e $pathnname ] && touch "${pathnname}"
		extname=`echo "$filename" | awk -F. '{print $NF}'`
		if [ "$extname" == "mp3" -o "$extname" == "wma" -o "$extname" == "ogg" -o "$extname" == "flac" ]; then
			echo -E "#[UTF8FULLPATH]${path}\\${filename}" >> "$pathnname"
		fi
	fi
done
}
savepath="/media/MUSIC CARD/PLAYLISTS"
cd /media/MUSIC\ CARD/MUSIC
dirscan "/media/MUSIC CARD/MUSIC"
unset IFS

###########################################################
#	此脚本只用于制作适合魅族M3使用的播放列表
#	如作其他用途,请自行修改相关参数
#	播放列表样本如下:
#	#[UTF8FULLPATH]\MUSIC\direct_name\your_music.flac
###########################################################
===========下面是帖子本来的旧内容,请无视之===========

代码: 全选

#!/bin/sh
dirscan()
{
for filename in "`ls $1`"; do
	if [ -d $filename ]; then
		cd $filename
		dirscan $(pwd)/${filename}
		cd ..
	else
		echo $filename
	fi
done
}
cd $1
dirscan "$1"
=========

代码: 全选

~/ttttt$ sh ./test ./
[: 15: fh: unexpected operator
fh test test2 untitled folder untitled folder 2
上次由 ルルティア 在 2010-07-12 14:49,总共编辑 2 次。
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid

Re: 遍历目录的脚本老写不好,急躁。。

#2

帖子 leeaman » 2010-07-11 9:33

似乎错误蛮低级的~~~
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#3

帖子 ルルティア » 2010-07-11 9:36

:em42 啥错误啊。。折腾了好久了,早饭都没吃,饿死了
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
头像
leeaman
帖子: 30702
注册时间: 2007-02-02 18:14
系统: debian sid

Re: 遍历目录的脚本老写不好,急躁。。

#4

帖子 leeaman » 2010-07-11 9:37

我那知道...只是灌水而已...google现成的参考啊
醉了星星,醉月亮●●●●●The Long Way To Go(*^_^*)
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#5

帖子 ルルティア » 2010-07-11 9:43

:em20 都参考了十几个样本了。。
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 遍历目录的脚本老写不好,急躁。。

#6

帖子 JiangHui » 2010-07-11 9:48

直接用tree不就完了吗
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 遍历目录的脚本老写不好,急躁。。

#7

帖子 JiangHui » 2010-07-11 9:59

代码: 全选

#!/bin/sh
dirscan()
{
for filename in *; do
   if [ -d $filename ]; then
      cd $filename
      dirscan $(pwd)/${filename}
      cd ..
   else
      echo $filename
   fi
done
}
cd $1
dirscan "$1"
姐控要的是这种效果吗?层次都没有,真难看
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#8

帖子 ルルティア » 2010-07-11 10:45

你那边能运行不?还是出错 :em06

代码: 全选

~/ttttt$ sh ./test ./
[: 15: Plain: unexpected operator
Plain text document.txt
sdg.txt
test
test2
[: 15: untitled: unexpected operator
untitled folder
[: 15: untitled: unexpected operator
untitled folder 2
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#9

帖子 ルルティア » 2010-07-11 10:47

我本来用的是 $1/* 遍历的。。但是遇到有空格的文件名就出错了
所以还是用"'ls'" :em20
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 遍历目录的脚本老写不好,急躁。。

#10

帖子 JiangHui » 2010-07-11 11:00

图片
没测试过的代码我不会放上来的
不是给你改了吗?针对文件名空格的问题

代码: 全选

#!/bin/sh
dirscan()
{
for filename in *; do
   if [ -d "$filename" ]; then
      cd $filename
      dirscan $(pwd)/${filename}
      cd ..
   else
      echo $filename
   fi
done
}
cd $1
dirscan "$1"
加个引号就是了
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 遍历目录的脚本老写不好,急躁。。

#11

帖子 JiangHui » 2010-07-11 11:03

我还是坚持6楼的,姐控的脚本就算成功了也没法看 :em04
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#12

帖子 ルルティア » 2010-07-11 11:24

:em20 为什么没法看啊,我的和你的不就一个星号*的区别吧
你这个我还是出错,晕了。。。你找个有空格的文件夹试试啊,引号加在filename上面没用吧。。主要是那个*的问题,你试试echo ./*就知道了。。
刚刚IRC有人提示我看IFS什么的,正在研究中 :em20
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

Re: 遍历目录的脚本老写不好,急躁。。

#13

帖子 JiangHui » 2010-07-11 11:32

你看我的输出结果第一条
a 11是带空格的吧
当然 $filename都要加引号,上面贴出来的我就加了第一个

没有层次感,输出来的东西没法看,我就给你改了下报错的地方,如果是我就直接重写一个了
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#14

帖子 ルルティア » 2010-07-11 11:33

tree的话,我还要去处理它的输出,更麻烦
我想自己一个一个文件夹进去处理文件的啊
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

Re: 遍历目录的脚本老写不好,急躁。。

#15

帖子 ルルティア » 2010-07-11 11:35

不是蛮有层次的嘛,不会是你浏览器坏了吧 :em04
你那个很奇怪啊,是不是我的解释器和你的不一样。。 :em20
附件
2010-07-11-113404_512x420_scrot.png
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
回复