Files
如何進行“如果更改則複製”操作?
我想將一組文件從目錄 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