Rsync

只對修改後的文件應用美化器的原始碼樹的鏡像

  • July 16, 2019

我保留了同一個原始碼樹的兩個副本:一個是“工作副本”,另一個是“儲存副本”。當我完成編輯“工作副本”時,我刷新“儲存副本” rsync(僅複製修改的文件,此外,工作副本中已刪除的文件也將在儲存的文件中刪除)。還有一個單片機,但它發生在“儲存副本”之後,所以我們可以忽略這裡的單片機。

但是現在我想在從“工作副本”刷新到“儲存”副本時應用程式碼美化器。程式碼美化器可以通過標準輸入/標準輸出重定向應用,但是,AFAIKrsync不允許在執行複制時通過標準輸入/標準輸出過濾器。

我只想美化修改後的文件,因為我不想修改“儲存副本”中未更改文件的時間戳。“工作副本”和“儲存副本”的美化規則不同,因此不能對工作副本應用美化器。

我怎樣才能做到這一點?任何適用於 UNIX 的解決方案都是可以接受的,儘管我更喜歡 Bourne shell 腳本或 C 程序。如果rsync可以以某種特殊的方式使用它,那也很好。

鑑於問題和評論中解釋的限制,我將首先消除用於工作副本和儲存副本的樣式指南之間的差異。但是,我知道這可能非常困難,因此請隨意忽略該建議。

我不認為rsync,在復製文件時過濾文件)是在送出“儲存的副本”之前嘗試應用“美化”的正確位置。如果您可以使用 SCM,我會搭載它;例如,使用git, 之後rsync

git diff --name-only -z | xargs -O beautifier

beautifier在所有更改的文件上執行,假設它可以在作為參數給出的文件上執行。

如果您不能(或不會)使用 SCM,您可以使用rsync日誌(請參閱--log-file--log-file-format選項)找出rsync複制的內容,並僅在這些文件上執行美化器。

如果rsync日誌不能被利用,還有另一種方法可以解決這個問題:對“儲存副本”中的每個文件執行美化器,輸出到臨時文件,並將輸出與原始文件進行比較。如果美化更改了文件,請將輸出複制回原始文件。

引用自:https://unix.stackexchange.com/questions/530432