2013-04-02 82 views
1

我想從一個範圍的父文件夾的轉選擇性子文件夾:rsync的選擇的子文件夾

/home/user/sample_rsync/ 
FolderA/sub1 
FolderA/sub2 
FolderA/sub3 
FolderB/sub1 
FolderB/sub2 
FolderB/sub3 
FolderC/sub1 
FolderC/sub2 
FolderC/sub3 

說從上面的例子中我想從每個目錄複製只是SUB1。即在我的目的地我希望創建以下文件夾

/destination/ 
sample_rsync/FolderA/sub1 
sample_rsync/FolderB/sub1 
sample_rsync/FolderC/sub1 

我如何去這樣做(與它們所包含的文件一起)?

我嘗試了

rsync -avh -f"- *" -f"+ *sub1/*" /home/user/sample_rsync /destination/ 

在試圖排除一切,然後就包括SUB1的 - 沒有工作。

任何方式,我可以得到這個工作?

回答

1

假設你的源文件夾是在一個名爲「源」作爲你的第一個代碼監視模式類型的文件(不帶尾隨/字符)

for s in $(cat sources) 
do 
    rsync -av ${s} /destination/sample_rsync/$(echo ${s}| awk -F "/" '{print $1}') 
done 
當然

,如果你有一定的水平深目錄,這是唯一有效的在你的源文件中。如果要複製的目錄的深度級別發生更改,則需要對此腳本進行大量修改。但至少這是我希望的一個起點。

在下面你的問題,你可能想使用這樣的事情:(忽略上面的代碼段我剛離開那裏對歷史的目的)

cd /home/user/sample_rsync 
for dir in $(find ./ -type d -name sub1) 
do 
    dest=$(echo ${dir} | sed -e "1,1s+/sub1++") 
    mkdir /destination/sample_rsync/${dest} 
    rsync -av ${dir} /destination/sample_rsync/${dest} 
done 

請不要把它作爲的話福音。我還沒有測試任何代碼。所以。它可能產生一些意想不到的結果請在系統上進行測試,如果出現故障,您不會介意有問題。

+0

對不起有點新的Linux,我剛剛在哪裏指定我只是想拉名爲「sub1」的子文件夾?或者文件來源是否包含我想要提取的文件夾?如果是這樣,我想避免手動設置源文件列表。 – Sooshii

+0

請在上面的答案中查看第二個代碼段 – MelBurslan