2015-02-10 19 views
13

我想從服務器A的所有文件複製到不同層次的文件系統層次結構具有相同的父目錄名字服務器B,如:如何通過保持目錄結構不變來使rsync文件具有匹配的路徑模式?

/var/lib/data/sub1/sub2/commonname/filetobecopied.foo 
/var/lib/data/sub1/sub3/commonname/filetobecopied.foo 
/var/lib/data/sub2/sub4/commonname/anotherfiletobecopied.foo 
/var/lib/data/sub3/sub4/differentname/fileNOTtobecopied.foo 

我想前三個文件都具有複製commonname在服務器B的路徑中。我已經花了很多時間尋找rsync的正確包含/排除模式,但我沒有得到它。以下命令不起作用:

rsync -a --include='**/commonname/*.foo' --exclude='*' [email protected]:/var/lib/data /var/lib/data 

我要麼匹配太多,要麼文件很少。我如何才能將其路徑中的文件與commonname同步?

+1

您應該在[Unix&Linux](http://unix.stackexchange.com/)stackexchange或[ServerFault](http://serverfault.com/)上提問。 – 2015-02-10 19:17:21

回答

23

我猜你正在尋找這樣的:

rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' [email protected]:/var/lib/data /var/lib/data 

有2個分歧與你的命令:

  • 最重要的一個是--include='*/'。沒有這個,如你所指定的--exclude='*',rsync永遠不會進入子目錄,因爲一切都被排除在外。隨着--include='*/',子目錄不再排除,所以rsync可以愉快地遞歸。
  • 最不重要的是-m:這會修剪空目錄。沒有這個,你也會得到複製的(空)子目錄/var/lib/data/sub3/sub4/differentname/
+0

謝謝你,完美的作品! – murks 2015-02-15 14:33:41

相關問題