2017-03-29 42 views
0

我想編寫一個腳本來恢復文件,但保留創建回退文件後可能做的更改。在bash中合併行

更多細節:在某個時刻我創建了一個文件(file_orig)的備份。對原始文件進行一些更改(file_my_changes)。之後,原始文件可以再次更改(file_additional_changes),但在恢復後,我想要備份文件,以及其他更改(file_orig + file_addtional_changes)。一般只會退回我的更改。

我說的是grub.cfg文件,所以預期可能的更改將添加或刪除部分行。

這是否可以用bash腳本來完成?

我有兩個想法:

  1. 添加我要改變線以上一些意見,然後resotore之前,如果該行從備份出來的文件的有所不同,閱讀評論,它會告訴我究竟要從線路上刪除什麼;

  2. 如果有一種方法只顯示與file_orig和file_additional_changes不同的行的部分,則將此行替換爲file_orig中的行+不同的部分。但我不確定這是否有可能完成。

實施例」

LINE1:這是第1行

LINE2:這是另一個LINE1

是否有可能只顯示 「另一個」

當然任何其他?想法很歡迎!

謝謝!

+0

請[編輯]你的問題,以顯示[你到目前爲止嘗試過的](http://whathaveyoutried.com)。你至少應該包括一個你遇到問題的代碼大綱(但最好是[mcve]),然後我們可以嘗試幫助解決具體問題。你還應該閱讀[問]。 –

+0

當你在談論grub.cfg時,最好告訴我們你實際上想要做什麼?您通常不需要手動編輯此文件,因爲有其他文件可供您執行更改,以便每次更新時都會發生這些更改。這是一個標準的x/y問題,你沒有告訴我們你真正想要什麼。 – grail

+0

聽起來像一個'git'的好工作... – twalberg

回答

0

不清楚,但如果您使用的是bash腳本,您可以在編輯過的文件和最後一個文件上運行diff,並將輸出保存到某個要保留的位置?這意味着你有一個變化的副本。

或者只是像其他人一樣使用git。

0

一種可能性是使用POSIX命令patchdiff

  • 創建備份:

    cp operational-file operational-file.001 
    
  • 編輯的工作文件。再次

    diff -u operational-file.001 operational-file > operational-file.patch001 
    
  • 複製操作文件:

  • 從差異創建一個補丁。

    cp operational-file operational-file.002 
    
  • 再次編輯操作文件。

  • 創建一個新的補丁

    diff -u operational-file.002 operational-file > operational-file.patch002 
    

如果您需要恢復,但是從patch.001跳過變化,則:

cp operational-file.001 operational-file 
patch -i patch.002 

這只是第二組更改應用到原始文件,因爲沒有重疊的日誌。

考慮使用版本控制系統來記錄文件更改的記錄。考慮在文件名上使用日期/時間戳而不是版本號。

+0

嗨喬納森,我試過你的建議,但我最終得到了原始內容的操作文件和patch.002,比較了行,這在操作系統中並不存在,文件,所以命令失敗。我所嘗試的是具有以下文件內容:operational-file:a;第一次更新:a b;第二次更新:a b c;在恢復後,我想結束內容:a c; – maimun4itu

+0

雖然這對我來說非常有趣,但是新的(非常感謝您分享),在腳本應用的環境中,我沒有補丁命令,所以它不會有太大的幫助,但要嘗試並學習新的的東西。再次感謝您的幫助。 – maimun4itu