递归地将目录的内容复制到所有目标目录

时间:2014-11-14 10:56:43

标签: linux terminal cp

我有一个包含一组子目录和文件的目录。我需要以递归方式递归地将此目录的所有内容复制到另一个目录的所有子目录。

如何实现这一目标,最好不使用脚本,只使用cp命令?

3 个答案:

答案 0 :(得分:3)

你不能。 cp可以复制多个来源,但只会复制到一个目的地。您需要安排多次调用cp - 每个目的地一次 - 为您想要做的事情;正如你所说,使用循环或其他工具。

答案 1 :(得分:3)

你可以在脚本中写这个,但你不必这样做。只需在终端中逐行写出:

# $TARGET is the directory containing subdirectories where you want to STORE the copies
# $SOURCE is the directory containing the subdirectories you want to COPY

for dir in $(ls $TARGET); do
   cp -r $SOURCE/* $TARGET/$dir
done

仅使用cp并在bash和zsh上运行。

答案 2 :(得分:2)

管道之前命令的第一部分指示tar创建当前目录中所有内容的存档并将其写入标准输出( - 代替文件名经常表示stdout)。

tar cf - * | ( cd /target; tar xfp -)

括号内的命令使shell将目录更改为目标目录,并将untar数据从标准输入更改。由于cd和tar命令包含在括号内,因此它们的操作一起执行。

tar extract命令中的-p选项指示tar保留权限和所有权信息,如果可能,在用户执行命令的情况下。如果以超级用户身份运行该命令,则默认情况下会启用此选项,并且可以省略该选项。

此外,您可以使用以下命令,但它似乎比tar;

慢得多
cp -a * /target