2009-03-02 80 views
19

我期待在Fedora中做一個特定的副本。如何遞歸地將目錄複製到另一個目錄並只替換未更改的文件?

我有兩個文件夾:

  • '根目錄':保存所有網頁文件/圖片等

  • '出口':包含數千PHP,CSS,JS文件,即從導出的文件夾我的SVN回購。

出口目錄包含許多相同的文件/文件夾的根呢,但是根包含在出口沒有找到另外一個。

我想用下面的選項與我的根目錄合併所有出口的內容:

  1. 改寫在根目錄的文件,如果出口的版本包含比 是根目錄的版本里不同的代碼(住)
  2. 保存文件的權限/用戶/用戶組,如果它被覆蓋(出口 版本替換真人版)*注:我想保持webroots權限/所有權,但隨着出口的內容
  3. 沒有提示/停止複製任何種類的(即不詳細)
  4. 遞歸複製的 - 很明顯,我 想所有的*文件 文件夾和子文件夾中發現複製 出口

我已經做了一些研究到CP - 這將做的工作?:

cp -pruf ./export /path/to/webroot 
+0

請注意,您的第一個標準並不清楚。答案主要假設你的意思是'如果webroot中的文件比導出文件中的文件更新,請保持獨立'。如果你確實是指'比較內容和複製出口版本,如果有差異',那麼簡單地複製一切...繼續... – 2009-03-02 04:31:47

回答

24

它可能會發生,但任何時候exportwebroot中的相應文件都具有相同的內容,但修改時間不同,您可以結束執行不必要的複製操作。你可能從rsync得到稍微聰明行爲:

rsync -pr ./export /path/to/webroot 

此外,rsync可以從一臺主機複製到另一個文件通過SSH連接,如果你有需要做到這一點。此外,它還有一個可以指定的zillion選項來調整其行爲 - 請查看手冊頁以獲取詳細信息。

編輯:關於您通過保留權限來說明您的意思:您可能想要忽略-p選項。

6
  1. -u覆蓋目標是否比舊的源現有文件夾
  2. -p perserves許可和日期
  3. -f關閉冗長
  4. -r使得副本遞歸

所以看起來像你得到了所有正確的參數傳遞給CP

5

聽起來像一個工作爲cpio(因此,很可能的GNU tar可以做到這一點):

cd export 
find . -print | cpio -pvdm /path/to/webroot 

如果您需要保存的業主,你必須這樣做的根源,當然。 -p選項是'傳遞模式',意思是位置之間的複製; -v是詳細的(但不是互動;有一個區別); -d表示根據需要創建目錄; -m表示保留修改時間。默認情況下,如果沒有-u選項,cpio將不會覆蓋目標區域中比源區域中的文件更新的文件。

相關問題