如何用shell遍历一个目录下的所有子目录

DIR=$1

可以使用ls或者find来完成对某个文件夹下所有文件的遍历比如使用ls

shell 遍历_shell遍历数组元素shell 遍历_shell遍历数组元素


shell 遍历_shell遍历数组元素


2)source:配置文件(功能描述:让修改后的配置文件立即生效)

ls 某个目录/

也可以使用find来完成

比如

find 某个目录

自然的也可以写一个shell脚本来进行遍历

首先进行一个要遍历的文件夹

然后循环查看每个文件

如果该文件是一个文件夹的话则进入该文件夹做和上面相同的

这样就可以该整个文件夹内的所有文件进行遍历了

如何在linux中使用shell脚本遍历指定目录的文件,将创建时间大于指定时间的文件,到指定目录下。

elif [ -f "$basepath" ];then

大于指定时间?最简单的就是直接find里面指定吧。例如,查找当前目录及其子目录所有mtime大于1天的文件:

find

-t可以简单地使用一个通配符来完成ype

f-mtime

+1

即可,/path

可以换成其他路径,-mtime

+1

表示时间大于1天。-1的话表示小于一天也就是1天之内的。

请教大神shell的for in语句中怎么使用多个变量

到要查找的目录下,运行

如果是bash,,可以用自 for (( expr1; expr2; expr3 )) 这种循环语法来实现。比如for (( i=1, j=7; i<5 && j >3; i++, j-- )),do,,echo "i $i, j $j",done。注意变量名称的个字符不可以是数字,但是可以是下划线。要使用变量的值,在变量前面加上$符号即可。

#!/bin/sh

使用% :%表示参数,参数是在运行批处理文件时在文件名后加的字符串。变量可以从 %0到%9,%0表示文件名本身,字符串用%1到%9顺序表示。

扩展资料

shell脚本中的if多条件语句

在shell中条件语句是“if-then”,if语句后面是一个命令执行度结束的退出状态码是 0,则执行 then 部分的命令,否则then 不执行;fi是if的结束标志。if语句的嵌套使用和其他语言基本一致,直接在if中继续使用if语句即可。

嵌套的层数没有限制,但不要过多的层数,这样会让代码显得比较混来,难以理解,多个版条件判断使用“if then-elif then”,这里和其他编程语言不同,可以加else也可以不加else。

下图就是你要达到的目的吧,1.txt为10行内容,2.txt为10行内容,C目录有10个文件,for.sh为实现的shell脚本。

上图就是你要达到的目的吧,1.txt为10行内容,2.txt为10行内容,C目录有10个文件,for.sh为实现的shell脚本。

或者如下图:

#!/bin/bash

a=(`cat 1.txt`)

b=(`cat 2.txt`)

c=(`ls C`)

for (( i = 0; i < 10; i++))

do

echo ${a[$i]} ${b[$i]} ${c[$i]}

你的意思是,对于文本文件,遍历显示内容;对于目录,遍历输出其中的文件名,是这样吗?

如果我理解得不对,请纠正!

for in 循环本身就是针对多数据(数据)的循环,数据内的数据之间以空格分隔。

在循环中对中的每个元素分别判断是文本文件还是目录,然后做不同处理即可。

#!/bin/bash

A=/path1/file1

B=/path1/file2

C=/path2

for elem in $A $B $C

do

if [ -f $elem ]; then #文本文件

echo "${elem}:"

cat $elem

echo "---------------------------------------" #华丽的分隔线

fi

if [ -d $elem ]; then #目录

echo "${elem}:"

fi

Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂,却是云计算开发人员必须要掌握的技术之一。接下来就给大家梳理一下Shell变量相关的知识。

Linux Shell中的变量可以被指定为任意的数据类型,比如文本字符串或者数值。你也可以通过修改Shell中的变量来改变Shell的样式。

Shell支持三种定义变量的方式:

variable=value

variable='value'

variable="value"

variable是变量名,value是赋给变量的值。如果value不包含任何空白符(例如空格、Tab缩进等),那么可以不使用引号;如果value包含了空白符,那么就必须使用引号包围起来。注意,赋值号=的周围不能有空格。

Shell变量的命名规范和大部分编程语言一样:变量名由数字、字母、下划线组成;必须以字母或者下划线开头;不能使用Shell里的关键字(通过命令可以查看保留关键字)。

Linux中Shell变量分为系统变量和用户自定义变量,系统变量包括$HOME、$PWD、$SHELL、$USER、echo $SHELL以及显示当前Shell中所有变量set。

Shell自定义变量包括1)定义变量:变量=值;2)撤销变量:unset变量;3)声明静态变量:readonly变量,注意不能unset;4)使用export把变量提升为全局环境变量,如/etc/profile中的TOMCAT_HOME变量,且在另外的/opt/tmp/shell/myShell.sh脚本中使用该环境变量。

Shell设置环境变量

基本语法:

1)export:变量名=变量值(功能描述:将shell变量输出为环境变量)

3)echo:$变量名(功能描述:查询环境变量的值)

单行注释:#

多行注释::<

Shell脚本很适合处理纯文本类型的数据,而Linux中几乎所有的配置文件、日志文件(如NFS、Rsync、Httpd、Nginx、MySQL等),以及绝大多数的启动文件都是纯文本类型的文件。Shell是运维人员必须要掌握的技能,此外还需要掌握Linux、信息安全、Docker容器等。

#来自:DZ动力(verydz)

解决shell脚本遍历带空格的文件/文件夹名

在做iOS Flutter依赖引入的时候,需要去遍历Pods 工程中的文件,而这个工程下刚好有一个名称带空格的文件夹。如下:

如下的脚本会出问题:

原因是,执行 ls 命令的时候,文件夹名称带了空格,被当成了分隔符。

网上查了一下相关资料,都是说把分隔符修改掉,使用时再改回来。于是脚本变成了这样:

但是这样还会有问题,我们知道 $1 是获取个参数,那么在名称带空格的文件夹递归入参时,又会因为空格的问题变成两个参数。那问题就变成:把过个参数变成一个参数。就是: $ 。 此外还需要特别注意的是,每一个引用带空格的文件或者文件夹名称时必须带上引号,才能成为一个整体。

最终脚本如/usr/bin/iconv -f GBK -t UTF-8 $SPATH/$filename -o $DPATH/$filename下:

如果解决了你的问题,玛法点个赞或/path者留言,让我知道你来过。

如何用shell脚本遍历指定目录下的文件,并按后缀名分类

cp $fh /tmp/scripttest

脚本1:

elif [ -d $filename ] ; then

#!/bin/bash

##

cd /tmp/script

cfile=` find -name '.c' `

hfile=` find -name '.h' `

for fc in $cfile

do

cfname=`basename -s .c $fc`

cat $fc >/tmp/scripttest/$cfname.txt

for fh in $hfile

do

#!/bin/bash

while true

do

if [ -f /root/.warming ];then

cp /root/xxx.conf /tmp

fi

如何在linux中使用shell脚本遍历指定目录的文件,将创建时间大于指定时间的文件,到指定目录下。

done

创建一个脚本judgetime,内容如下:

ls -l $|awk '{split($8,hour,":");if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}'

find ./ -name "" -exec judgetime {} ;

注意时间格式为24小时制。

TIME=$2

OTDIR=$3

TMP=`find $1 -mtime +$2DPATH=$DPATH/$filename -print`

echo $TMP

cp $TMP $OTDIR

执行时 要有3个参数指定文件的目录 大于指定的时间 到的目录

没写验证部分 参数顺序不要写错

用shell层级遍历dir目录,统计文件总数量、总大小,并按扩展名分类统计各种文件的数目、总大小。

ls $elem

#!/bin/bash

if [ -d $file ]

function directory(){

for file in $(ls $1)

do

basepath="$1/$file"

if [ -d "$basepath" ];then

echo "|-directory:$file" $(du -h $basepath|cut -f 1)

directory $basepath

echo "|--file:$file" $(du -h $basepath|cut -f 1)

fi

}directory $1

调用方法: ./testfind.sh 你要遍历的路径

我只是简单的写了一个,大致功能的思想如此,你也可以在此基础上进行扩展,不过好像应该有

现成的,你网上搜一搜吧。。

linux shell 遍历文件夹 并将结果保存 到变量

trel_file()

{cd $1

for file in `ls`

do

then

echo "" >> $filepath/ret.txt

echo -e $file Directory "c" >> $filepath/ret.txt

fi

if [ -f $file ]

then

echo -e File $file "c" >> $filepath/ret.txt

fi

then

trel_file $file

fi

}if [ $# -lt 1 ]

then

echo "输入文件目录"

exit -1

fi

if [ ! -d $1 ]

then

echo "$1 不是目录"

exit -1

fi

filepath=`pwd`

if [ -f $filepath/ret.txt ]

then

rm $filepath/ret.txt

fi

trel_file $1

文件名称 file.sh 执行命令 file.sh test

生成文件格式

folder1 Directory File a.txt File b.txt File c.txt

subfolder Directory File d.txt File e.txt

Shell脚本遍历目录并批量修改文件并保存,有两种实现代码;

编写脚本文件实现:使用函数循环调用

#!/bin/bash

##

SPATH="/root/chengji/WebRoot"

DPATH="/web"

# 函数开始部分

CYCLING(){

filelist=`ls -1 $SPATH`

for filename in $filelist ; do

if [ -f $filename ] ; then

echo Filename:$filename

#cp -pv $SPATH/$filename $DPATH/$filename 该句为前期便利效果测试

sed -i -e 's/gb2312/UTF-8/g' -e 's/GB2312/UTF-8/g' $DPATH/$filename

mkdir -pv $DPATH

cd $filename

SPATH=`pwd`

# Next for recurse 如果遇到目录进行自我调用。。。实现深层遍历

CYCLING

# Next Usag: basename dirname

DPATH=`dir#/bin/bashname $DPATH`

SPATH=`dirname $SPATH`

cd $SPATH

else

echo "File $SPATH/$filename is not a common file.Please check."

fi

}# 命令开始部分

cd $SPATH

CYCLING

echo "All Done."不使用函数循环调用:

#Auth: Mo

#Desc:

#SPATH="/root/chengji"

DIR=WebRoot

DPATH="/web"

find ${DIR} -type d -exec mkdir -pv ${DPATH}/{} ;

find ${DIR} -type f -exec iconv -f GBK -t UTF-8 {} -o ${DPATH/{} ;

echo "The file Next Listed is not a common file or directory ,please check."

find ${DIR} ! -type f -a ! -type d -ecec ls -l {} ;

find $DPATH -type f -exec sed -i -e 's/gb2312/UTF-8/g' -e 's/GB2312/UTF-8/g' {} ;

echo ' '

echo "All Done."

这样?

脚本:

#!/bin/bash

a=`ls folder1/.txt |awk -F'/' '{print$NF}'`

echo 'folder1 Directory File '$a

b=`ls folder1/subfolder/.txt |awk -F'/' '{print$NF}'`

echo 'subfolder Directory File '$b

结果for i in $A $B $C; do echo $i; done:

sh test.sh

folder1 Directory File a.txt b.txt c.txt

subfolder Directory File d.txt e.txt

1. tree command 2.

fun_call_back()

{for i in `ls`;

do

if [ -d $i ];then

echo "folder $i"

cd $i cd ../

fi

echo $i

}