shell脚本:利用7z备份git项目
2024-09-28 05:32:59
注:无git的方法参见:tar 或 7z 备份项目
首先利用homebrew安装p7zip
$ brew install p7zip
然后利用两个shell脚本:
- backupProject.sh 会在指定的项目文件夹中找到所有.git目录,对其git gc压缩,然后用7za创建两个7z文件:
- PROJECTDIR.2016-03-15-12-00-00.Src.7z
- PROJECTDIR.2016-03-15-12-00-00.gitpack.7z
- restoreProject.sh 会将上述两个文件用7za解压到目录:
- PROJECTDIR.2016-03-15-12-00-00.output
准备:
- 准备工作:首先用文本编辑工具打开 backupProject.sh 文件,修改项目名称 projPath=PROJECTDIR 和压缩密码 password=Demo 然后打开 restoreProject.sh 文件,修改解压缩密码 password=Demo
- 给两个 sh 脚本可执行权限:
chmod +x backupProject.sh restoreProject.sh
- 两个脚本与项目文件夹 PROJECTDIR 在同级目录
使用:
- 备份:
./backupProject.sh
- 还原:
./restoreProject PROJECTDIR.-----.Src.7z
例子:
$ ls
PROJECTDIR backupProject.sh restoreProject.sh // 备份
$ ./backupProject.sh
Ready...
git gc: PROJECTDIR/.git
Nothing new to pack.
git gc: PROJECTDIR/frameworks/.git
...
git gc: PROJECTDIR/library/.git
...
git gc: PROJECTDIR/Universal/.git
...
Backuping(/): PROJECTDIR.-----.Src.7z
...
Backuping(/): PROJECTDIR.-----.gitpack.7z
...
Done. $ ls
PROJECTDIR
PROJECTDIR.-----.Src.7z
PROJECTDIR.-----.gitpack.7z
backupProject.sh
restoreProject.sh // 恢复
$ ./restoreProject.sh PROJECTDIR.-----.Src.7z
Ready...
Extracting PROJECTDIR.-----.Src.7z...
...
Extracting PROJECTDIR.-----.gitpack.7z...
...
Output Dir: PROJECTDIR.-----.output
Done. $ ls
PROJECTDIR
PROJECTDIR.-----.Src.7z
PROJECTDIR.-----.output
PROJECTDIR.-----.gitpack.7z
backupProject.sh
restoreProject.sh
$ ls PROJECTDIR.-----.output/
PROJECTDIR
$
脚本源码如下:
backupProject.sh
#!/bin/sh
projPath=PROJECTDIR
password=Demo
## level=,,,,, Level is no compression, is normal, is Ultra.
level=
## gitgc=, is not gc, is git gc
gitgc=
now=`date +%Y-%m-%d-%H-%M-%S`
output=$projPath.$now.Src.7z
output2=$projPath.$now.gitpack.7z function printMsg() {
echo "\033[1;34m$1\033[0m"
} function printMsgNoColor() {
echo "\033[1;m$1\033[0m"
} ## start
printMsg "Ready..."
for gitdir in `find $projPath -iname ".git"`; do
if [[ $gitgc -eq ]]; then
printMsg "git gc: $gitdir"
git -C $gitdir/.. gc
else
printMsgNoColor "$gitdir"
fi
pack="$gitdir/objects/pack/"
xrdirs="$xrdirs -xr!$pack"
packs="$packs $pack"
done
printMsg "Backuping(1/2): $output"
7za a -t7z -mx=$level $output "$projPath/" -scsUTF- -p$password $xrdirs
printMsg "Backuping(2/2): $output2"
7za a -t7z -mx= $output2 $packs -scsUTF- -p$password
printMsg "Done."
restoreProject.sh
#!/bin/sh
password=Demo function printError() {
echo "FAIL!"
echo "SAMPLE1: $0 xxxxxxxx.Src.7z"
echo "SAMPLE2: $0 xxxxxxxx.gitpack.7z"
} function printMsg() {
echo "\033[1;34m$1\033[0m"
} ## start
printMsg "Ready..."
if [[ -a $ ]]; then
if [[ $ == *.Src.7z ]]; then
file1=$
file2=`echo $|sed -n "s/\.Src\.7z/\.gitpack\.7z/p"`
elif [[ $ == *.gitpack.7z ]]; then
file1=`echo $|sed -n "s/\.gitpack\.7z/\.Src\.7z/p"`
file2=$
else
printError
exit
fi output=`echo $file1|sed -n "s/\.Src\.7z/.output/p"`
if [[ -a $file1 ]]; then
printMsg "Extracting $file1..."
7za x -aoa -y $file1 -o$output -p$password
fi
if [[ -a $file2 ]]; then
printMsg "Extracting $file2..."
7za x -aoa -y $file2 -o$output -p$password
fi
printMsg "Output Dir: $output"
printMsg "Done."
else
printError
fi
下载:
https://github.com/m2nlight/backupProject
最新文章
- Url重写——伪静态实现
- No.005:Longest Palindromic Substring
- matlab初学之roundn和round
- BT5 &; Kali Linux 网卡选择
- springmvc中实现quartz定时任务
- Windows下查看进程及结束进程命令[转]
- 转:C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
- jackson 转json. 过滤null值
- 201521123089 《Java程序设计》第8周学习总结
- LeetCode 110. Balanced Binary Tree (平衡二叉树)
- cs231n spring 2017 lecture14 Reinforcement Learning 听课笔记
- Java注解(一):介绍,作用,思想及优点
- Swagger2 添加HTTP head参数
- Eclipse External Tool Configration Notepad++
- SpringBoot 定时任务不能同时运行的问题
- ubuntu下修改网卡名称
- 【Java】 剑指offer(15) 数值的整数次方
- 【拓扑排序】BZOJ4010-[HNOI2015]菜肴制作
- switch语句语法
- Unity加载二进制数据