我正在写一个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)
。
答案 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