在上一篇博客中,我分享了一些关于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
#!/bin/bash
:这是一个Shebang行,用来指定使用哪种解释器来执行这个脚本,这里指定使用Bash解释器。# Function: 批量更改当前目录下的指定文件类型名
:这是一个注释行,用来说明这个脚本的功能。read -p "请输入文件后缀类型: " FILE_TYPE
:这一行通过read
命令提示用户输入要更改的文件类型后缀,并将输入的值赋给变量FILE_TYPE
。FILE=*.${FILE_TYPE}
:这一行将**FILE
**变量设置为当前目录下所有以用户输入的文件类型后缀结尾的文件名。if [ -z FILE ]; then
:这是一个条件判断语句,判断变量**FILE
**是否为空,如果为空,则输出提示信息并退出脚本。for file in FILE
:这是一个for循环,遍历变量**FILE
**中的每个文件名。echo "当前文件:$file"
:输出当前处理的文件名。read -p "请输入更改名: " newName
:提示用户输入新的文件名,并将输入的值赋给变量**newName
**。mv "$file" "${newName}.${FILE_TYPE}"
:使用**mv
**命令将当前文件名更改为用户输入的新文件名,并保持文件类型后缀不变。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
#!/bin/bash
:指定使用Bash解释器来执行这个脚本。#Function: 批量处理当前目录文件 edit view remove next quit
:这是一个注释行,说明了这个脚本的功能。DIRS=$1
:将位置参数$1赋给变量DIRS,这个脚本似乎没有使用到这个变量。if [ ! -z $DIRS ] ; then
:检查变量DIRS是否为空,如果不为空,则输出提示信息并退出脚本。for i in *
:遍历当前目录下的所有文件。if [ ! -f i] ; then continue fi
:检查当前文件是否为普通文件,如果不是,则跳过当前循环。while true
:进入一个无限循环,直到用户选择退出。echo -n "$i: Edit, View, Remove, Next, Quit? [e|v|r|n|q]: "
:输出操作选项给用户选择。read choice
:读取用户的选择。case $choice in
:根据用户选择的操作进行不同的处理。e* ) vim $i;;
:如果用户选择编辑,则使用vim编辑器打开当前文件。v* ) cat $i;;
:如果用户选择查看,则使用cat命令显示当前文件内容。r* ) rm -i $i && break;;
:如果用户选择删除,则使用rm命令删除当前文件,并且跳出内层循环。n* ) break;;
:如果用户选择下一个文件,则跳出内层循环。q*) exit 0;;
:如果用户选择退出,则退出脚本。) 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"
#!/bin/bash
:指定使用Bash解释器来执行这个脚本。#Function: 备份指定路径文件
:这是一个注释行,说明了这个脚本的功能。BACKUP_PATH=~/backup
:定义备份的目的地目录为用户的家目录下的backup文件夹。DATE=$(date +%Y%m%d%H)
:生成一个时间戳,用于备份文件名,格式为年月日时。if [ ! -d "$BACKUP_PATH" ]; then
:检查备份目录是否存在,如果不存在则创建。read -p "请输入您需要备份的目录路径: " source_path
:提示用户输入需要备份的源目录路径,并将输入的值赋给变量source_path。if [ ! -d "$source_path" ]; then
:检查输入的源目录是否存在,如果不存在则输出错误信息并退出脚本。tar -czf ${BACKUP_PATH}/backup-${DATE}.tar.gz -C "$source_path" .
:使用tar命令将指定路径的文件和目录打包成一个压缩文件,并存储在备份目录下,文件名包含了时间戳以区分不同的备份文件。echo "已完成 $source_path 的备份,备份文件存储在 $BACKUP_PATH/backup-$DATE.tar.gz"
:输出备份完成的提示信息,包括源目录路径和备份文件存储路径。