Wayne
Calendar
| November | ||||||
|---|---|---|---|---|---|---|
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
| 26 | 27 | 28 | 29 | 30 | 31 | 1 |
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 1 | 2 | 3 | 4 | 5 | 6 |
Categories
Search
Random Posts
Counter
423034
Hot Posts
New Comments
New Messages
Links
RSS
一个简单的改名备份脚本
Wayne
posted @ Wed, 23 Feb 2011 20:27:12 +0000
in Experience
, 2881 readers
虽然说打算在服务器上用版本控制来管理部署的程序了,但一时终归还没用起来。而按照惯例,上传新版时旧版是不删的,仅仅改个名字存放起来而已。改名字时也没啥严格规定,一直以来有点乱。当然也许别人重命名还是比较规矩的,但反正我是很随心所欲的,搞得经常自己也记不清楚,只能靠修改时间来辨认。上次写了个脚本,把给名字自动加上时间后缀作为备份命令,倒也还管用。这次想再改进一下,上点参数,能整成 "*.latest", "*.current", "*.last" 之类的效果。
#!/bin/bash
case "$1" in
"") echo "Usage: bak [option] filename"
echo "bak: rename a file as a backup"
echo "Try \"bak -h\" for help"
exit
;;
*)
rename=0
option=0
while getopts "hrlc" flag
do
option=1
case "$flag" in
"h") helplist=1;;
"r") let "rename += 1";;
"l") last=1;;
"c") current=1;;
esac
done
if [ "$option" -ne 1 ]
then
filename=$1
newfilename=$filename.`date +%Y%m%d%H%M`
mv -f $filename $newfilename
echo $newfilename
exit
fi
;;
esac
if [ "$helplist" = 1 ]; then
echo "bak: rename a file as a backup"
echo "Usage: bak [option] filename"
echo "default(no option): rename filename to filename.`date +%Y%m%d%H%M`"
echo "Options:"
echo " -l: rename filename to filename.last"
echo " -c: rename filename to filename.current"
echo " -r: cut the end of filename from the last dot, example:"
echo " filename.last --> filename"
echo "multiple r will try to cut multiple part split by dot from the end, as:"
echo " -rrr filename.section1.secion2.section3 --> filename"
exit
fi
case "$2" in
"") echo "Usage: bak [option] filename"
echo "bak: rename a file as a backup"
echo "Try \"bak -h\" for help"
;;
*)
filename=$2
newfilename=$filename
if [ "$rename" -ne 0 ]; then
for i in `seq 1 $rename`
do
newfilename=${newfilename%.*}
done
fi
if [ "$last" = 1 ]; then
newfilename=$newfilename.last
elif [ "$current" = 1 ];then
newfilename=$newfilename.current
else
newfilename=$newfilename.`date +%Y%m%d%H%M`
fi
mv $filename $newfilename
echo $newfilename
;;
esac
Comments (0)