Re: [問題] 如何防止意外overwrite一個檔案

看板Linux作者 (wyvernlee)時間16年前 (2009/11/03 13:46), 編輯推噓1(105)
留言6則, 4人參與, 最新討論串2/3 (看更多)
※ 引述《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 程式,以上流程應該不難才對。祝好運!! -- ※ 發信站: 批踢踢實業坊(ptt.cc)

11/03 19:45, , 1F
雖然我也沒有用版本控制系統的習慣 但是這樣的需求應該是用
11/03 19:45, 1F

11/03 19:46, , 2F
版本控制系統最恰當了~~
11/03 19:46, 2F

11/03 20:16, , 3F
版本控制也要你有記得commit啊~ :oy
11/03 20:16, 3F

11/03 21:23, , 4F
返回上一次的修改應該也夠用了吧
11/03 21:23, 4F

11/04 10:02, , 5F
那就 make 前一律 commit 一次如何?
11/04 10:02, 5F

11/04 10:28, , 6F
有寫 Makefile 應該不會發生這種事才對 XD
11/04 10:28, 6F
※ 編輯: wyvernlee 來自: 118.232.140.21 (03/04 23:13)
文章代碼(AID): #1AxyEt1C (Linux)
文章代碼(AID): #1AxyEt1C (Linux)