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

sh/bash/dash/ksh/zsh等Shell脚本
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

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

#16

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

那你用find好了

find ~ ! -type d -exec ls '{}' \;
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

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

#17

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

ルルティア 写了:不是蛮有层次的嘛,不会是你浏览器坏了吧 :em04
你那个很奇怪啊,是不是我的解释器和你的不一样。。 :em20
不是说代码啦,是输出,所有文件夹和文件都直接列出来了,分不清层次
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

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

#18

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

JiangHui 写了:那你用find好了

find ~ ! -type d -exec ls '{}' \;
这个貌似很有效啊,不过要处理那些结果也很麻烦,我就是想自己进目录去。。不要别的命令进。。
不过,这个啥意思啊,找到(find)类型(type)不是(!)目录(d)的,执行ls??后面'{}' \;干啥的啊?
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

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

#19

帖子 JiangHui » 2010-07-11 12:13

你具体想干什么啊?

跟你说的差不多,find很强大也很复杂
delectate
帖子: 18311
注册时间: 2008-01-09 22:41

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

#20

帖子 delectate » 2010-07-11 12:16

ルルティア 写了:
JiangHui 写了:那你用find好了

find ~ ! -type d -exec ls '{}' \;
这个貌似很有效啊,不过要处理那些结果也很麻烦,我就是想自己进目录去。。不要别的命令进。。
不过,这个啥意思啊,找到(find)类型(type)不是(!)目录(d)的,执行ls??后面'{}' \;干啥的啊?
man find

SYNOPSIS
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

加上sudo 配合rm特别爽
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

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

#21

帖子 tusooa » 2010-07-11 12:30

代码: 全选

tlcr: 0 庚寅年五月三十日 12:05:30  ~
>> dog 应用/源码/printdir/main.c
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>

void printdir(char *dir, int depth)
{
        DIR *dp;
        struct dirent *entry;
        struct stat statbuf;

        if((dp = opendir(dir)) == NULL)
        {
                fprintf(stderr, "Error: Cannot open directory: %s\n", dir);
                return;
        }
        chdir(dir);
        while((entry = readdir(dp)) != NULL)
        {
                lstat(entry->d_name, &statbuf);
                if(S_ISDIR(statbuf.st_mode))
                {
                        if(strcmp(".", entry->d_name) == 0 ||
                                        strcmp("..", entry->d_name) == 0)
                                continue;

                        printf("%*s%s/\n", depth, "", entry->d_name);
                        printdir(entry->d_name, depth+4);
                }
                else printf("%*s%s\n", depth, "", entry->d_name);
        }
        chdir("..");
        closedir(dp);
}
int main(int argc, char *argv[])
{
        char *topdir = ".";
        if(argc >= 2)
                topdir = argv[1];

        printf("Directory scan of %s\n", topdir);
        printdir(topdir, 0);
        printf("\ndone\n");

        exit(0);
}

tlcr: 0 庚寅年五月三十日 12:26:08  ~
>> 
(抄书的)这个多好用阿。

代码: 全选

] ls -ld //
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

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

#22

帖子 JiangHui » 2010-07-11 12:42

:em04 用C多简单啊
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

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

#23

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

我想写一个制作播放列表的脚本
播放列表以每个文件夹的名字命名,内容是
#EXTM3U
#EXTINF:0,With An Orchid.mp3
\Yanni\With An Orchid.mp3
写了一个,估计肯定运行不了,这个方法不好,我还是看看怎么遍历吧。。

代码: 全选

find $1 -type d -exec  find '{}' -maxdepth 0 -name '*.mp3' -o '*.wma' -o '*.flac' -execdir echo #EXTM3U'\n'#EXTINF:0,`ls '{}'`'\n'$(pwd)\`ls '{}'` >> `$(pwd).m3u` \; \;
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

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

#24

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

这个程序我很多年前就写好了,当时是win下用VB写的,但是源码忘在姐的电脑里了,再也找不回来了。。 :em20
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

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

#25

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

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

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

#26

帖子 JiangHui » 2010-07-11 14:49

slocate *.flac >> ~/playlist.m3u
头像
ルルティア
帖子: 1077
注册时间: 2010-05-23 17:10

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

#27

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

JiangHui 写了:slocate *.flac >> ~/playlist.m3u
这个手动一个一个生成很慢啊,还是得遍历。。
everything is nada; nada is nothing
Otro Loco Más
我是Lavande的马甲,但是有时候,我觉得,我们不是同一个人。
delectate
帖子: 18311
注册时间: 2008-01-09 22:41

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

#28

帖子 delectate » 2010-07-11 15:57

纠结,真纠结
JiangHui
论坛版主
帖子: 21308
注册时间: 2007-08-02 20:29
系统: 窓辺とうこ

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

#29

帖子 JiangHui » 2010-07-11 15:58

代码: 全选

#!/bin/sh

function pl()
{
	while read line
	do
		dir=`dirname "$line"`
		name=`basename "$dir"`
		echo $name
		echo "$line" >> ~/desktop/playlist/"$name".m3u
	done
}

slocate "*.flac" | pl
头像
trigger
帖子: 1604
注册时间: 2006-10-25 18:08

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

#30

帖子 trigger » 2010-07-11 16:00

代码: 全选

#!/bin/bash
#作用:进入当前目录下的所有递归子目录,说hi,再回到出发的目录,避免有空格文件名造成的for...in...错误
hi=`pwd`
du | awk '{ $1="";print $0 }' |
while read line
do
cd "$line" && echo "i am in "$line" now " && cd "$hi"
done 
前一阵子写的,自己改改do里面的吧
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
回复