将文件夹的子项复制到多个文件夹

问题描述:

是否有任何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

据我了解你,你要一切从/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

您可以使用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