如何使用cp重复正确地将一个目录复制到新名称?

时间:2010-03-06 02:59:23

标签: unix shell makefile

我正在写一个makefile。但是除了路径扩展和对我能做什么的限制之外,这基本上是一个shell脚本问题。作为make过程的一部分,我想将目录复制到目标。我的源目录和目标目录是变量,所以我不能假设它们很多。他们可能是完全合格的,也可能是亲戚。

但我想将目录$(A)复制到目的地$(B)。 $(B)是我希望目录在目的地的名称,而不是我想要复制$(A)的目录(即结果目录名称是$(B),而不是$(A)/ $( B)),它可能是source和dest的相同路径,所以我在做任何事情之前用ifneq($(A),$(B))检查。但问题是,我该怎样做。

如果我这样做

cp -r $(A) $(B)

它将第一次工作。 $(A)被复制到$(B)。但如果该规则稍后再次触发,它将在$(B)内(即$(B)/ $(A))制作$(A)的新副本。

在你问之前,如果可能的话,我宁愿不rm -r $(B)

4 个答案:

答案 0 :(得分:3)

cp -r $(A) / $(B)

添加斜杠会将$(A)的内容复制到$(B)中,如果不存在则创建$(B)。

答案 1 :(得分:1)

如果你正在使用GNU cp,你可以这样做:

mkdir -p $(B)
cp -a --target-directory=$(B) $(A)

您还可以尝试rsync

rsync -a $(A) $(B)/

答案 2 :(得分:0)

第一次使用cp -r $(A) $(B)怎么样,然后使用-u的{​​{1}}仅在源比目标更新时复制?请参阅copy的手册页了解更多信息。

答案 3 :(得分:0)

使用rsync

而不是cp