如何防止意外overwrite一個檔案 - Linux
By Frederica
at 2009-11-03T13:46
at 2009-11-03T13:46
Table of Contents
※ 引述《nagahara (Nagahara)》之銘言:
: 昨天發生了一個慘劇,
: 我有a.c b.c兩個檔案 想compile成main執行檔
: 然後我下 gcc -o a.c b.c
: 忘記打main 所以gcc就把a.c檔覆蓋掉了
: 寫了一個禮拜的code就這樣沒了...QQ
: 想請問有沒有辦法在檔案會被overwrite以前,
: 會像rm -i一樣 會先詢問過user在動作呢?
: 謝謝
原 po 的問題應該從源頭著手,而不是在編譯時處理。我也曾經手殘自己砍過幾次檔案,
後來痛定思痛決定在使用 vi 時進行自動備份,以下是我的想法及作法:
1. 在 ~/ 目錄中建立一個名為 .backup 的目錄
2. 我使用 vi 編輯器,因此我希望每次 vi 結束時會將目前編輯的檔案複製一個備份
至 ~/.backup 目錄下。現在問題來了,萬一我有一個檔案叫 abc,下次再複製一個
叫 abc 的檔案過去又被 overwrite 了。因此我希望在複製時在檔名後加上日期_時間
的標籤。舉例來說:abc 複製的時間是 2009/10/21 14:30 份,複製過來的檔名就叫
abc.20091021_1430
3. 除了以上想法外,在執行 vi 時不必特別執行什麼指令。
因此我寫了以下這個小 script: vi_autobak
#!/bin/bash
# Vi Automatic Backup,
# When exit, back up file as filename.YYMMDD_hhmm
[ ! -d ~/.backup ] && mkdir ~/.backup
file1=$1
file2=$2
file3=$3
file4=$4
file5=$5
file6=$6
file7=$7
file8=$8
file9=$9
vi $file1 $file2 $file3 $file4 $file5 $file6 $file7 $file8 $file9
[ ! -z $file1 ] && cp $file1 ~/.backup/$file1.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file2 ] && cp $file2 ~/.backup/$file2.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file3 ] && cp $file3 ~/.backup/$file3.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file4 ] && cp $file4 ~/.backup/$file4.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file5 ] && cp $file5 ~/.backup/$file5.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file6 ] && cp $file6 ~/.backup/$file6.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file7 ] && cp $file7 ~/.backup/$file7.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file8 ] && cp $file8 ~/.backup/$file8.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file9 ] && cp $file9 ~/.backup/$file9.$(date +%Y%m%d)_$(date +%H%M)
echo $file1 $file2 $file3 $file4 $file5 $file6 $file7 $file8 $file9
請在此檔存入 ~/bin 目錄,並在 .bashrc 中加入 alias vi='~/bin/vi_autobak'
後記:如果 ~/.backup 目錄太亂,可以直接刪裡面的資料,以下是我的 ~/.backup
目錄執行一段時間後的內容:
ls ~/.backup
zh_tw.20091020_1331
zh_tw.20091021_1002
zh_tw.20091021_1229
zh_tw.20091021_1230
zh_tw.20091021_1247
zh_tw.20091021_1923
zh_tw2.xml.20091021_1436
zh_tw.big5.20091021_1159
zh_tw.meta.20091021_1428
zh_tw.model.txt.20091021_1452
zh_tw.utf8.20091021_1148
zh_tw.utf8.20091021_1149
zh_tw.utf8.20091021_1150
zh_tw.utf8.20091021_1201
zh_tw.utf8.20091021_1216
zh_tw.utf8.orig.20091021_1151
zh_tw.utf8.orig.20091021_1152
zh_tw.utf8.orig.20091021_1153
zh_tw.utf8.orig.20091021_1154
zh_tw.utf8.orig.20091021_1156
zh_tw.utf8.orig.20091021_1157
--
原 po 既然會寫 c 程式,以上流程應該不難才對。祝好運!!
--
: 昨天發生了一個慘劇,
: 我有a.c b.c兩個檔案 想compile成main執行檔
: 然後我下 gcc -o a.c b.c
: 忘記打main 所以gcc就把a.c檔覆蓋掉了
: 寫了一個禮拜的code就這樣沒了...QQ
: 想請問有沒有辦法在檔案會被overwrite以前,
: 會像rm -i一樣 會先詢問過user在動作呢?
: 謝謝
原 po 的問題應該從源頭著手,而不是在編譯時處理。我也曾經手殘自己砍過幾次檔案,
後來痛定思痛決定在使用 vi 時進行自動備份,以下是我的想法及作法:
1. 在 ~/ 目錄中建立一個名為 .backup 的目錄
2. 我使用 vi 編輯器,因此我希望每次 vi 結束時會將目前編輯的檔案複製一個備份
至 ~/.backup 目錄下。現在問題來了,萬一我有一個檔案叫 abc,下次再複製一個
叫 abc 的檔案過去又被 overwrite 了。因此我希望在複製時在檔名後加上日期_時間
的標籤。舉例來說:abc 複製的時間是 2009/10/21 14:30 份,複製過來的檔名就叫
abc.20091021_1430
3. 除了以上想法外,在執行 vi 時不必特別執行什麼指令。
因此我寫了以下這個小 script: vi_autobak
#!/bin/bash
# Vi Automatic Backup,
# When exit, back up file as filename.YYMMDD_hhmm
[ ! -d ~/.backup ] && mkdir ~/.backup
file1=$1
file2=$2
file3=$3
file4=$4
file5=$5
file6=$6
file7=$7
file8=$8
file9=$9
vi $file1 $file2 $file3 $file4 $file5 $file6 $file7 $file8 $file9
[ ! -z $file1 ] && cp $file1 ~/.backup/$file1.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file2 ] && cp $file2 ~/.backup/$file2.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file3 ] && cp $file3 ~/.backup/$file3.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file4 ] && cp $file4 ~/.backup/$file4.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file5 ] && cp $file5 ~/.backup/$file5.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file6 ] && cp $file6 ~/.backup/$file6.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file7 ] && cp $file7 ~/.backup/$file7.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file8 ] && cp $file8 ~/.backup/$file8.$(date +%Y%m%d)_$(date +%H%M)
[ ! -z $file9 ] && cp $file9 ~/.backup/$file9.$(date +%Y%m%d)_$(date +%H%M)
echo $file1 $file2 $file3 $file4 $file5 $file6 $file7 $file8 $file9
請在此檔存入 ~/bin 目錄,並在 .bashrc 中加入 alias vi='~/bin/vi_autobak'
後記:如果 ~/.backup 目錄太亂,可以直接刪裡面的資料,以下是我的 ~/.backup
目錄執行一段時間後的內容:
ls ~/.backup
zh_tw.20091020_1331
zh_tw.20091021_1002
zh_tw.20091021_1229
zh_tw.20091021_1230
zh_tw.20091021_1247
zh_tw.20091021_1923
zh_tw2.xml.20091021_1436
zh_tw.big5.20091021_1159
zh_tw.meta.20091021_1428
zh_tw.model.txt.20091021_1452
zh_tw.utf8.20091021_1148
zh_tw.utf8.20091021_1149
zh_tw.utf8.20091021_1150
zh_tw.utf8.20091021_1201
zh_tw.utf8.20091021_1216
zh_tw.utf8.orig.20091021_1151
zh_tw.utf8.orig.20091021_1152
zh_tw.utf8.orig.20091021_1153
zh_tw.utf8.orig.20091021_1154
zh_tw.utf8.orig.20091021_1156
zh_tw.utf8.orig.20091021_1157
--
原 po 既然會寫 c 程式,以上流程應該不難才對。祝好運!!
--
Tags:
Linux
All Comments
By Ethan
at 2009-11-04T11:08
at 2009-11-04T11:08
By Lucy
at 2009-11-09T10:07
at 2009-11-09T10:07
By Hamiltion
at 2009-11-10T07:22
at 2009-11-10T07:22
By Delia
at 2009-11-14T16:36
at 2009-11-14T16:36
By Eartha
at 2009-11-18T17:11
at 2009-11-18T17:11
By Una
at 2009-11-21T08:40
at 2009-11-21T08:40
Related Posts
Ubuntu 9.10 Firefox 3.5.3
By Ida
at 2009-11-03T09:04
at 2009-11-03T09:04
GUI Framework
By Puput
at 2009-11-03T08:38
at 2009-11-03T08:38
安裝kernel header
By Quanna
at 2009-11-03T00:59
at 2009-11-03T00:59
Ubuntu 9.10 雙螢幕設定 xorg.conf
By Noah
at 2009-11-02T21:24
at 2009-11-02T21:24
google chrome dev channel
By Connor
at 2009-11-02T20:52
at 2009-11-02T20:52