Wayne


Calendar
February | ||||||
---|---|---|---|---|---|---|
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 | 1 |

Categories

Search

Random Posts

Counter
406211

Hot Posts

New Comments

New Messages

Links

RSS

一个简单的改名备份脚本
Wayne
posted @ Wed, 23 Feb 2011 20:27:12 +0000
in Experience
, 2833 readers
虽然说打算在服务器上用版本控制来管理部署的程序了,但一时终归还没用起来。而按照惯例,上传新版时旧版是不删的,仅仅改个名字存放起来而已。改名字时也没啥严格规定,一直以来有点乱。当然也许别人重命名还是比较规矩的,但反正我是很随心所欲的,搞得经常自己也记不清楚,只能靠修改时间来辨认。上次写了个脚本,把给名字自动加上时间后缀作为备份命令,倒也还管用。这次想再改进一下,上点参数,能整成 "*.latest", "*.current", "*.last" 之类的效果。
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #!/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 |