2011-09-09 232 views
0

是否有任何sh腳本可將文件夾中的所有子元素複製到其他多個文件夾。我想到的是這樣的。下面的文件夾將被複制。將文件夾的子項複製到多個文件夾

/Parent/ChildDir1 
/Parent/ChildDir2 
/Parent/ChildFile1 
/Parent/ChildFile2 

目的地會是這樣

/X/a/ 
/X/b/ 
/X/c/ 

的改寫是必要的。

感謝

+0

哪個Shell?目標目錄是否已經存在? –

+0

你能否澄清一下應該去哪裏?即'/ Parent/ChildDir1 =>/X/a','/ Parent/ChildDir2 =>/X/b'還是你的意思是其他映射? – Kerido

+0

所有的孩子都會去到每個/ X/* /目錄 – skuul

回答

1

據我瞭解你,你要一切從/Parent/複製到多個目的地文件夾?因此,每個/X/a/,/X/b//X/c/都有自己的獨立副本。在這種情況下,你可以只在這樣所有目的地循環:

DESTS = "/X/a/:/X/b/:/X/c/:" 
SRC = "/Parent/" 
while read -d: ddir; do 
    cp -r "$SRC" "$ddir" 
done <<< $DESTS 

DESTS年底,如果你找到read正確調用可能是可移動的額外:,我不能:(

+0

這似乎沒問題,是應用程序。 800個目標文件夾。定義目的地時是否可以使用通配符? – skuul

+0

是的,您可以使用通配符生成'DESTS'變量。例如,如果你想要'/ X /'的所有以'a'開頭的子目錄:'DESTS = $(find/X/-maxdepth 1 -type d -name'a *'-exec echo -n {} :\;)'。 (有可能是一個更簡單的方法來做到這一點,這只是我的頭頂) – carlpett

0

您可以使用find查找所有目錄中X即X/A,X/b,X/C等,然後遞歸複製源目錄放進去:

find /path/to/X -type d -maxdepth 1 -exec cp -r /path/to/Parent {} \; 

如果你的目錄列表在文件中,你可以只讀取文件中的每一行並執行cp,像這樣:

while IFS= read -r dir 
do 
    cp -r /path/to/Parent "$dir" 
done < dirs.txt 
+0

好吧,但現在我意識到有一些文件夾,我不想複製的東西英寸有可能從文件中讀取文件夾路徑像folders.txt – skuul

+0

@skuul是的,我已經更新了我的答案,從文件中讀取目錄。 – dogbane

相關問題