【Linux】Shell脚本(文件操作)

在上一篇博客中,我分享了一些关于Shell编程的整理内容,希望能够为大家提供一些基础知识和入门指导。这次,我将继续和大家分享一些更具实用价值的Shell脚本示例,主要是以文件操作相关的内容。

批量重命名文件

shell 复制代码
	#!/bin/bash
	# Function: 批量更改当前目录下的指定文件类型名
	
	read -p "请输入文件后缀类型: " FILE_TYPE
	FILE=*.${FILE_TYPE}
	
	if [ -z FILE ]; then
	    echo "查无此文件后缀类型!"
	    exit 1
	fi
	
	for file in FILE
	do
	    echo "当前文件:$file"
	    read -p "请输入更改名: " newName
	    mv "$file" "${newName}.${FILE_TYPE}"
	    echo "Successfully Renamed $file to ${newName}.${FILE_TYPE}"
	done
  1. #!/bin/bash:这是一个Shebang行,用来指定使用哪种解释器来执行这个脚本,这里指定使用Bash解释器。
  2. # Function: 批量更改当前目录下的指定文件类型名:这是一个注释行,用来说明这个脚本的功能。
  3. read -p "请输入文件后缀类型: " FILE_TYPE :这一行通过read命令提示用户输入要更改的文件类型后缀,并将输入的值赋给变量FILE_TYPE
  4. FILE=*.${FILE_TYPE} :这一行将**FILE**变量设置为当前目录下所有以用户输入的文件类型后缀结尾的文件名。
  5. if [ -z FILE ]; then :这是一个条件判断语句,判断变量**FILE**是否为空,如果为空,则输出提示信息并退出脚本。
  6. for file in FILE :这是一个for循环,遍历变量**FILE**中的每个文件名。
  7. echo "当前文件:$file":输出当前处理的文件名。
  8. read -p "请输入更改名: " newName :提示用户输入新的文件名,并将输入的值赋给变量**newName**。
  9. mv "$file" "${newName}.${FILE_TYPE}" :使用**mv**命令将当前文件名更改为用户输入的新文件名,并保持文件类型后缀不变。
  10. echo "Successfully Renamed $file to ${newName}.${FILE_TYPE}":输出更改成功的提示信息。

批量处理文件

shell 复制代码
	#!/bin/bash
	#Function: 批量处理当前目录文件 edit view remove next quit
	
	DIRS=$1
	
	if [ ! -z $DIRS ] ; then
		echo "未设置位置参数!"
		exit 1
	fi
	
	for i in *
	do
		if [ ! -f i] ; then
			continue
		fi
	
		while true
		do
			echo -n "$i: Edit, View, Remove, Next, Quit? [e|v|r|n|q]: "
			read choice
			case $choice in
				e* )	vim $i;;
	
				v* ) cat $i;;
	
				r* ) rm -i $i && break;;
	
				n* ) break;;
	
				q*)  exit 0;;
	
				* ) echo "Illegal Option"
			esac
		done
	done
  1. #!/bin/bash:指定使用Bash解释器来执行这个脚本。
  2. #Function: 批量处理当前目录文件 edit view remove next quit:这是一个注释行,说明了这个脚本的功能。
  3. DIRS=$1:将位置参数$1赋给变量DIRS,这个脚本似乎没有使用到这个变量。
  4. if [ ! -z $DIRS ] ; then:检查变量DIRS是否为空,如果不为空,则输出提示信息并退出脚本。
  5. for i in *:遍历当前目录下的所有文件。
  6. if [ ! -f i] ; then continue fi:检查当前文件是否为普通文件,如果不是,则跳过当前循环。
  7. while true:进入一个无限循环,直到用户选择退出。
  8. echo -n "$i: Edit, View, Remove, Next, Quit? [e|v|r|n|q]: ":输出操作选项给用户选择。
  9. read choice:读取用户的选择。
  10. case $choice in:根据用户选择的操作进行不同的处理。
  11. e* ) vim $i;;:如果用户选择编辑,则使用vim编辑器打开当前文件。
  12. v* ) cat $i;;:如果用户选择查看,则使用cat命令显示当前文件内容。
  13. r* ) rm -i $i && break;;:如果用户选择删除,则使用rm命令删除当前文件,并且跳出内层循环。
  14. n* ) break;;:如果用户选择下一个文件,则跳出内层循环。
  15. q*) exit 0;;:如果用户选择退出,则退出脚本。
  16. ) echo "Illegal Option":如果用户选择了非法的操作,输出提示信息。

备份指定路径文件

shell 复制代码
	#!/bin/bash
	#Function: 备份指定路径文件
	
	# 定义备份的目的地目录
	BACKUP_PATH=~/backup
	
	
	# 生成一个时间戳,用于文件名
	DATE=$(date +%Y%m%d%H)
	
	if [ ! -d "$BACKUP_PATH" ]; then
		mkdir $BACKUP_PATH
	fi
	
	
	# 提示用户输入需要备份的源目录
	read -p "请输入您需要备份的目录路径: " source_path
	
	# 检查输入的目录是否存在
	if [ ! -d "$source_path" ]; then
	    echo "提供的目录不存在,请检查路径是否正确:$source_path"
	    exit 1
	fi
	
	# 执行备份操作
	tar -czf ${BACKUP_PATH}/backup-${DATE}.tar.gz -C "$source_path" .
	echo "已完成 $source_path 的备份,备份文件存储在 $BACKUP_PATH/backup-$DATE.tar.gz"
  1. #!/bin/bash:指定使用Bash解释器来执行这个脚本。
  2. #Function: 备份指定路径文件:这是一个注释行,说明了这个脚本的功能。
  3. BACKUP_PATH=~/backup:定义备份的目的地目录为用户的家目录下的backup文件夹。
  4. DATE=$(date +%Y%m%d%H):生成一个时间戳,用于备份文件名,格式为年月日时。
  5. if [ ! -d "$BACKUP_PATH" ]; then:检查备份目录是否存在,如果不存在则创建。
  6. read -p "请输入您需要备份的目录路径: " source_path:提示用户输入需要备份的源目录路径,并将输入的值赋给变量source_path。
  7. if [ ! -d "$source_path" ]; then:检查输入的源目录是否存在,如果不存在则输出错误信息并退出脚本。
  8. tar -czf ${BACKUP_PATH}/backup-${DATE}.tar.gz -C "$source_path" .:使用tar命令将指定路径的文件和目录打包成一个压缩文件,并存储在备份目录下,文件名包含了时间戳以区分不同的备份文件。
  9. echo "已完成 $source_path 的备份,备份文件存储在 $BACKUP_PATH/backup-$DATE.tar.gz":输出备份完成的提示信息,包括源目录路径和备份文件存储路径。
相关推荐
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock4 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面6 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq6 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮7 小时前
Linux 使用中的问题
linux·运维
dsywws8 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零9 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge9 小时前
Docker篇(Docker Compose)
运维·docker·容器
李启柱9 小时前
项目开发流程规范文档
运维·软件构建·个人开发·设计规范