Files

如何進行“如果更改則複製”操作?

  • February 4, 2022

我想將一組文件從目錄 A 複製到目錄 B,但需要注意的是,如果目錄 A 中的文件與目錄 B 中的文件相同,則不應複製該文件(因此其修改時間不應更新)。有沒有辦法用現有的工具來做到這一點,而無需編寫我自己的腳本來做到這一點?

詳細說明一下我的案例:我在一個臨時目錄中自動生成一堆.c文件(通過一種必須無條件生成所有文件的方法),當我重新生成它們時,我只想複製那些已更改為實際源目錄的目錄,而未更改的目錄保持不變(具有舊的創建時間),這樣make就知道不需要重新編譯它們。(但並非所有生成的文件都是.c文件,所以我需要進行二進制比較而不是文本比較。)

(注:這源於我在https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981762#8981762上提出的問題,我在那裡嘗試加快我用來執行此操作的腳本文件,但我突然想到,我真的應該問是否有比編寫自己的腳本更好的方法來做到這一點 - 特別是因為在 shell 中執行此操作的任何簡單方法腳本將cmp在每對文件上呼叫類似的東西,並且啟動所有這些程序需要很長時間。)

rsync 可能是最好的工具。此命令有很多選項,請閱讀手冊頁。我想你想要 –checksum 選項或 –ignore-times

您可以使用-u開關來cp喜歡這樣:

$ cp -u [source] [destination]

從手冊頁:

  -u, --update
      copy only when the SOURCE file is newer than the destination file or 
      when the destination file is missing

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