利用Shell指令碼實現vi/cp/mv前自動備份源檔案

來源:互聯網
上載者:User

以下指令碼把所有要編輯的源檔案備份到/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命令時最好也備份一下目標檔案,以免被意外覆蓋。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.