linux shell for循环解决递归循环目录结构

今天总结一下关于linux shell里的递归循环的问题
起因是一个群友在群里的提问
问的是怎么把有或多或少空目录的几个文件移动走的问题
归根结底就是一个递归循环的问题

如果之前接触过c语言之类的编程语言、那么这个很好理解
就是通过函数来不断的自己调用自己
这种方法有一个很大的弊端就是需要很多资源
比如有一种进程调用的 fork 炸弹 就是自调用搞的

接下来我就贴一下代码然后简单的讲解一下

#!/bin/sh
. /etc/plus.lib
a()
{
    for file  in `ls $1`
    do
        if [ -d $1"/"$file ];then
            a $1"/"$file
        else
            echo $1"/"$file
        fi
    done
}
a /tmp

那么这个就是整个的代码
通过一个大的循环
然后判断是目录还是文件
如果是一个文件的话、就把它echo出来、当然这个脚本没有功能、
如果是想要做一些处理的话、可以自行处理
如果不是一个文件而是一个目录的话、
那就调用自己重新循环一遍当前目录

[email protected]:/tmp/tmp# sh a.sh 
/tmp/a/01
/tmp/a/1/02
/tmp/a/1/asdasf/ashfakjsgba
/tmp/a/aaa
/tmp/b/03
/tmp/tmp/a.sh

就总结这么多,以后有机会再补充

时间: 2024-12-29 23:54:44

linux shell for循环解决递归循环目录结构的相关文章

转:《Linux设备驱动程序3》源码目录结构和源码分析经典链接

转自:http://blog.csdn.net/geng823/article/details/37567557 [原创][专栏]<Linux设备驱动程序>--- LDD3源码目录结构和源码分析经典链接 [专栏]Linux设备驱动程序学习(总目录) [专栏]LDD3源码分析链接(总目录) 1. LDD3源码分析之hello.c与Makefile模板 2. LDD3源码分析之字符设备驱动程序 其他错误: 我的Linux内核为 3.2.0-65-generic-pae,在scull目录下make时

Linux小白第二弹之文件系统与目录结构大汇总

Linux小白第二弹之文件系统与目录结构大汇总 今天聊一下关于目录结构的东东. LInux的标准目录结构是由根/和一级目录组成,文件和目录被组织成一个单根倒置树结构.文件系统从根目录下开始,用"/"表示.一级目录如下:bin(binary),所有用户使用的基本命令:不能关联至独立分区,OS启动就会用到的程序[普通用户]: boot,引导文件存放目录,内核文件(vmlinuz).引导加载器(bootloader,grub)都存放于此目录: dev对应的是设备,如硬盘光盘: etc,配置文

Linux shell的条件判断、循环语句及实例

shell条件判断的两个特殊设备 /dev/null linux系统的空设备,也称为位桶,任何写入其中的数据均会被丢弃当你不想将标准化输出显示或者保存至文件时可以将文件从定向到/dev/null 禁止标准化输出 cat $filename > /dev/null 禁止标准化错误 rm $filename > /dev/null /dev/zero Linux的输入设备,可以用他初始化文件,可以无限制输出0, 另一个作用是用0去填充一个指定大小的文件 在条件判断语句中&&表示an

在window上使用 linux shell 删除文件夹递归地

目的 在windows环境下, 整理代码,代码中含有 .svn 文件夹, 此文件夹在所有受控目录下都存在, 需要统一删除. 但是对windows的shell不熟悉,想用linux rm来删除, 如何实现? 方法 1.找到运行linux shell的工具, cygwin限制为安装目录. git工具可以执行shell,正适合此场景. 2. 鼠标右键点击目录目录, 选择 “git bash here” 3. 执行如下命令: find . -name ".svn"  | xargs rm -r

linux命令格式,获取帮助及其目录结构简要理解

我们都知道,一台计算机要是没通电,和一堆废铁没什么区别.那么,通电开机进入系统后,会进入交互界面,等待用户操作,人与计算机交互界面有两种: GUI:图形用户接口.如我们平时使用的Windows  ,linux的X window,有KDE和GOME. CLI:命令行接口,使用的SHELL类型有bash ,csh,tcshell,zshell等. 例如:[[email protected] ~]# commandbin root:当前登录的用户名. dxlcentOS:当前主机的主机名.@是一个分隔

Linux shell脚本编程入门(二) 循环语句

前面有了变量的概念和逻辑运算符,就可以写判断语句了,不过这里注意中括号的两边必须得留空格,不然报错. 运算符 赋值, 用 let 语句, 如 let "a=1" 算数运算, 支持 +  -  *  /  %(模运算)  **(幂运算) 位运算符, 支持 <<(左移)  >>(右移)  &(按位与)  |(按位或)  ~(按位取反)  ^(按位异或) if / then / else 语句 先举个栗子呗~ #!/bin/bash read var1 if

Linux Shell基础 - 流程控制 - for循环

01.for循环 语法一: for  time in  m n  a e    =>    以空格区分for循环个数 do echo  "This time is $time" done 语法二: s=0 for (( i=1;i<=100;i=i+1 )) do s=$(( $s+$i )) done echo "The sum of 1+2+....+100 is : $s" 例子:批量解压缩脚本 cd /lamp ls *.tar.gz>ls

Linux编程 1 (文件系统路径说明, 目录结构说明)

一. Linux文件系统路径说明 熟悉windows系统的,都知道文件路径表示,如C:\User\rich\Documnets\test.doc. 在linux中目录称为虚拟目录(virtual directory) 根目录是root,根目录下的目录和文件会按照访问它们的目录路径一一列出.如:/home/rich/Documnets/test.doc(斜杠与windows系统相反).  路径本身并没有提供任何有关文件究竟存放在哪个物理磁盘上的信息. 在linux pc上安装的第一块硬盘称为根驱动

java File类-递归遍历目录结构和树状展现

f.listFiles(); //返回目录下的所有子目录和子文件版本一:未加计数器分层次 static void f(File f) { System.out.println(f.getName()); if(f.isDirectory()) { File[] files=f.listFiles(); //如果是目录,返回目录下的所有子目录和子文件 for(File fi:files) { f(fi); } } } 版本二:加计数器分层次 static void f(File f,int lev