shell脚本-批量获取目录下所有文件的md5值、大小、inode值

该文介绍了两个bash脚本,分别用于批量计算文件的MD5哈希值和获取inode信息及文件大小。MD5用于验证文件传输的完整性,inode是Linux系统中存储文件元信息的数据结构。这两个脚本遍历指定目录及其子目录,对每个文件执行相应操作并输出结果。

批量获取MD5值

MD5的全称是Message-Digest Algorithm 5,它一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5值等同于文件的ID,它的值是唯一的。 如果文件已被修改,其MD5值将发生变化。

#!/bin/bash

if [ ! -n "$1" ]
then
	echo "请带上要查询目录的绝对路径"
	exit 1
fi

#定义全局变量存放首层路径
first_path=$1

#获取文件函数
function getfile(){
	#进入目录
	cd "$1"
	for item_path in *
	do
		#排除目录为空的情况
		if  [ "${item_path}" != "*" ]
		then
			#拼接成绝对路径
			path=$1"/"${item_path}
			#判断是不是目录,是的话调用方法遍历获取目录下的文件
			if [ -d ${path} ] && [ "item_path" != "*" ]
			then
				getfile "${path}"
			else
				#求出文件MD5值,但去掉根路径
				#井号用于代替分隔符,因为路径中符号会影响它
				echo `md5sum ${path}`  | sed "s#${first_path}##g"
			fi
		fi
	done
}

#调用函数
getfile ${first_path}
 

运行结果:

批量获取文件大小、inode值

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区",每个扇区储存512字节。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

#!/bin/bash

if [ ! -n "$1" ]
then
	echo "请带上要查询目录的绝对路径"
	exit 1
fi

#定义全局变量存放首层路径
first_path=$1

#获取文件函数
function getfile(){
	#进入目录
	cd "$1"
	for item_path in *
	do
		#排除目录为空的情况
		if  [ "${item_path}" != "*" ]
		then
			#拼接成绝对路径
			path=$1"/"${item_path}
			#判断是不是目录,是的话调用方法遍历获取目录下的文件
			if [ -d ${path} ] && [ "item_path" != "*" ]
			then
				getfile "${path}"
			else
				inode=`stat ${path} | grep Inode | awk '{print $4}'`
				inode_len=`echo ${inode} | awk '{print length($0)}'`
				let inode_len=10-inode_len
				inode_len=`printf "%${inode_len}s"`
				size=`du -h ${path} | awk '{print $1}'`
				size_len=`echo ${size} | awk '{print length($0)}'`
				let size_len=10-size_len
				size_len=`printf "%${size_len}s"`
				filename=`echo ${path} | sed "s#${first_path}##g"`
				echo "${inode}${inode_len}${size}${size_len}${filename}"
			fi
		fi
	done
}

#打印标题
echo "Inode     Size      FileName"
#调用函数
getfile ${first_path}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快吃土的小羊吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值