oracle 查看运行脚本文件路径,如何用shell脚本来查看目标文件夹下所有的file和directory-临时文件夹路径...

本文介绍了如何利用Shell脚本来遍历指定文件夹及其子目录,统计其中的目录和文件数量。通过创建队列实现广度优先搜索(BFS),详细展示了脚本的实现过程,并给出了测试环境和具体代码。适用于熟悉Linux环境和Shell编程的读者。
摘要由CSDN通过智能技术生成

概述

如果大家熟悉java的话,遍历文件夹然后检索相关信息可能比较简单,基本有现成的资料,修修补补就好了。今天主要讲怎么用shell来遍历目标文件夹和所有文件并统计相关信息。

需求

编写一个shell脚本来查看目标文件夹下所有的file和directory,并且打印出他们的绝对路径。

运行command:./showdir.sh input_path output_result

思路:

BFS遍历,数据结构为queue,数组实现

测试环境准备[oracle@nwppdb:/home/oracle]$mkdir -p test/test1/test11/test111

[oracle@nwppdb:/home/oracle]$mkdir -p test/test2/test22

[oracle@nwppdb:/home/oracle]$echo 123>test/1.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/2.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/test1/3.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/test1/test11/4.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/test1/test11/5.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/test2/6.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/test2/test22/7.txt

[oracle@nwppdb:/home/oracle]$echo 123>test/test2/test22/8.txt

254cbd2d0ed002d90f62daacb463a62f.png

脚本实现:[oracle@nwppdb:/home/oracle]$cat showdir.sh

#!/bin/bash

SAVEIFS=$IFS

IFS=$(echo -en "\n\b") #处理特殊字符文件名

queue[0]="head"

path_[0]=''

head_index=0 #head = the first inde - 1

tail_index=1 #tail=length the last index + 1

head="null"

dir_count=0

file_count=0

path=``

#if the output directory is not exist, make a new directory

#处理目标文件所处地址不存在问题

out_path=$2

e_path=""

while [ ${out_path##*/} != ${out_path%%/*} ]

do

dir_name=${out_path%%/*}

if [ ! -e $e_path""$dir_name ]

then

mkdir $e_path""$dir_name

fi

e_path=$e_path""$dir_name"/"

out_path=${out_path#*/}

done

touch $2

#use queue to take BFS

function enQueue(){ #insert into tail

queue[${tail_index}]=$1

path_[${tail_index}]=$path"/"$1

tail_index=$((${tail_index}+1))

}

function deQueue(){ #dequeue from head

head_index=$((${head_index}+1))

head=${queue[head_index]}

}

#start of this program

enQueue $1

while [ ${head_index} -ne $((${tail_index}-1)) ]

do

deQueue

path_[1]=`pwd`"/"$1

path=${path_[$head_index]}

echo "["${head}"]" >>$2

for var in `ls ${path_[$head_index]}`

do

if [ -d $path"/""${var}" ]

then

dir_count=$((${dir_count}+1))

enQueue $var

fi

echo $path"/""${var}" >>$2

file_count=$((${file_count}+1))

done

echo "" >>$2

done

file_count=$((${file_count}-${dir_count}))

echo "[Directories Count]:"${dir_count} >>$2

echo "[Files Count]:"$file_count >>$2

IFS=$SAVEIFS

b3098e4f3794b4c83dffb13f212239ba.png

7964dbeed1db374c675b1ead2853e164.png

测试脚本cd /home/oracle

./showdir.sh test showdir.md

3edd6a59f76fb613be20c4e7a72a76fa.png

篇幅有限,用shell去遍历的内容就介绍到这了,大家有空也可以自己测试下。

后面会分享更多关于devops和DBA方面内容,感兴趣的朋友可以关注下!!

5637afafa7c8b6f98f2e9d59fae6bba9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值