【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":输出备份完成的提示信息,包括源目录路径和备份文件存储路径。
相关推荐
D-海漠15 分钟前
基础自动化系统的特点
运维·自动化
我言秋日胜春朝★23 分钟前
【Linux】进程地址空间
linux·运维·服务器
C-cat.44 分钟前
Linux|环境变量
linux·运维·服务器
yunfanleo1 小时前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
糖豆豆今天也要努力鸭1 小时前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎2 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师2 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char2 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾2 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
长弓聊编程2 小时前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++