歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> 利用Shell腳本實現vi/cp/mv前自動備份源文件

利用Shell腳本實現vi/cp/mv前自動備份源文件

日期:2017/3/3 16:40:33   编辑:關於Linux

以下腳本把所有要編輯的源文件備份到/bak目錄下,並且所有的路徑位置保持不變,比如vii /etc/hosts,則把/etc/hosts復制到/bak/etc/hosts。

# cat /sh/vii

#!/usr/bin/bash

#判斷源文件是否存在,存在才執行備份操作

if [ -f "$1" ];then

#創建函數,可實現任意鍵繼續

#如果你的機器上不認stty raw那麼把函數中兩處出現的raw換成cbreak

get_char()

{

SAVEDSTTY=`stty -g`

stty -echo

stty raw

dd if=/dev/tty bs=1 count=1 2> /dev/null

stty -raw

stty echo

stty $SAVEDSTTY

}

#創建備份的根路徑/bak,並讓所有人具有寫權限

if [ ! -d "/bak" ];then

mkdir /bak

chmod a+w /bak

fi

#判斷目標文件所處的路徑並創建,讓所有人對新創建的任一級目錄均具有寫權限

echo $1 | grep "/" >/dev/null

if [ "`echo $?`" = "0" ];then

cd ${1%/*}

fi

pwdnow=`pwd`

path=/bak${pwdnow}

#echo $path

if [ ! -d "$path" ];then

mkdir -p $path

patha=${pwdnow#/}

chmod -R a+w /bak/${patha%%/*}

fi

#復制目標文件

datenow=`date +%Y%m%d`

timenow=`date +%H%M%S`

/usr/bin/cp $1 ${path}/${1##*/}.${datenow}.${timenow}

echo "Target file "$1"

has been copied to ${path}/${1##*/}.${datenow}.${timenow}"

echo "Now going to "vi $1",Press any key to continue..."

char=`get_char`

fi

#調用vi命令

vi $1

調用腳本

# chmod a+x /sh/vii

# /sh/vii /etc/passwd

你可以把/sh加入到PATH變量中,這樣就更方便了。

同理,涉及cp/mv命令時最好也備份一下目標文件,以免被意外覆蓋。

Copyright © Linux教程網 All Rights Reserved