使用git打patch
#!/bin/sh
#set -x
# if [ $# -ne 1 ]; then
# echo "请提供包含路径的输入文件"
# exit 1
# fi
# input_file=$1
input_file="git-file-path.txt"
if [ ! -f "$input_file" ]; then
echo "输入文件不存在"
exit 1
fi
while IFS= read -r path; do
path=$(echo "$path" | sed 's/[[:space:]]*$//')
if [ ! -d "$path" ]; then
echo "路径不存在: $path"
continue
fi
cd "$path" || continue
patch_file="$(git format-patch -1)"
if [ -z "$patch_file" ]; then
echo "未找到patch文件: $path"
continue
fi
dir_name=$(pwd)
dir_name=${dir_name//\//-}
new_patch_file="${dir_name}-${patch_file}"
new_patch_file="${new_patch_file/-/}"
mv "$patch_file" "$new_patch_file"
mv "$new_patch_file" "/data/code/git-patch"
echo "已处理路径: $path"
done < "$input_file"
echo "操作完成"
这段脚本是一个 Shell 脚本,用于处理包含路径的输入文件中的每个路径。以下是脚本的解释:
脚本的开头是一些注释,使用 # 开头。这些注释提供了一些脚本的说明和注释掉的代码段,用于检查输入文件是否提供。
input_file 变量被设置为固定值 "git-file-path.txt",指定了包含路径的输入文件的名称。
- 使用条件判断语句
[ ! -f "$input_file" ]检查输入文件是否存在。如果文件不存在,则输出错误信息并退出脚本。 while循环用于逐行读取输入文件中的路径。IFS= read -r path语句将每行的内容赋值给变量path。在赋值之后,使用sed命令去除路径末尾的空白字符。- 在循环中,使用条件判断语句
[ ! -d "$path" ]检查路径是否存在。如果路径不存在,则输出错误信息并继续下一次循环。 cd "$path" || continue用于尝试切换到指定的路径。如果切换成功,则继续执行下面的命令。如果切换失败(例如,路径无法访问),则继续下一次循环。patch_file="$(git format-patch -1)"执行git format-patch -1命令并将输出的补丁文件名赋值给变量patch_file。- 使用条件判断语句
[ -z "$patch_file" ]检查变量patch_file是否为空。如果为空,表示未找到补丁文件,输出错误信息并继续下一次循环。 dir_name=$(pwd)将当前路径赋值给变量dir_name。dir_name=${dir_name////-}是一种字符串替换语法,用于将变量dir_name中的所有斜杠/替换为连字符-。new_patch_file="${dir_name}-${patch_file}"生成一个新的补丁文件名,将dir_name和patch_file连接起来。new_patch_file="${new_patch_file/-/}"使用字符串替换语法将新补丁文件名中的第一个连字符-移除。mv "$patch_file" "$new_patch_file"将补丁文件重命名为新的补丁文件名。mv "$new_patch_file" "/data/code/git-patch"将补丁文件移动到/data/code/git-patch目录下。- 输出已处理的路径信息。
- 脚本结束时输出 "操作完成"。