随着代码越写越多。本地保存的git仓库也越来越多,有些是私有项目,有些是公开项目。其中也有很多是访问不多,本地做备份保存的仓库。说这么多废话,主要是遇到一个需要把本地代码运行git pull同步远端仓库代码。一个一个文件夹cd实在是太麻烦了。
#!/bin/bash
while getopts "Pp:" arg #选项后面的冒号表示该选项需要参数
do
case $arg in
P)
export HTTP_PROXY=http://127.0.0.1:1234
export HTTPS_PROXY=http://127.0.0.1:1234
;;
p)
# echo "a's arg:$OPTARG" #参数存在$OPTARG中
export HTTP_PROXY=$OPTARG
export HTTPS_PROXY=$OPTARG
;;
?) #当有不认识的选项的时候arg为?
echo -e '\033[31m参数列表:
-P 设置代理:HTTP_PROXY=http://127.0.0.1: 1234
HTTPS_PROXY=http://127.0.0.1: 1234
-p 指定代理,比如:-p http://127.0.0.1: 1234
\033[0m'
exit 1
;;
esac
done
shift $((OPTIND-1))
args=( "$@" )
if [ ! -n "$1" ] ;then
# 没有指定目录,设置为当前目录。
args='.'
fi
for arg in "${args[@]}"
do
if [ -n "$arg" ]; then
if [ -d "$arg" ]; then
path=$arg
else
echo -e "\033[31m'$arg'必须是目录,可以不加参数则默认处理当前目录\033[0m"
exit 1
fi
else
# path=$(dirname $0)
path=$(pwd)
fi
cd "$path" || continue
# 处理当前页面是否有git
if [[ -d ./.git ]]
then
echo "pulling $(basename $path)"
git pull
fi
# 其实理论上上面当前目录是git仓库了,这里是不需要再处理了。
parent_dir=$(ls .)
for dir in $parent_dir
do
if [[ -d $dir/.git ]]
then
echo "pulling $(basename $dir)"
cd "$dir" || continue
git pull
cd ..
fi
done
done