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

发布于 2024-08-24 15:09:11 字数 492 浏览 4 评论 0原文

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

但我想将目录 $(A) 复制到目标 $(B)。 $(B) 是我希望目录在目标位置具有的名称,而不是我想要将 $(A) 复制到的目录(即生成的目录名称将是 $(B),而不是 $(A)/$( B)),源和目标的路径可能相同,因此我在执行任何操作之前检查 ifneq ($(A),$(B))。但问题是,我在街区里做什么?

如果我执行

cp -r $(A) $(B)

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

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

I am writing a makefile. However except for the path expansion and restrictions on what I can do, this is basically a shell scripting question. As part of the make process, I want to copy a directory to the destination. My source directory and destination directory are variables, so I can't assume a lot about them. They may be fully qualified, they may be relative.

But I want to copy the directory $(A) to the destination $(B). $(B) is the name I want the directory to have at the destination, not the directory I want to copy $(A) to (i.e. the resulting directory name will be $(B), not $(A)/$(B)), it might be the same path for source and dest, so I check with an ifneq ($(A),$(B)) before doing anything. But the question is, what do I do in the block.

If I do

cp -r $(A) $(B)

it will work the first time. $(A) is copied to $(B). But if the rule triggers again later, it will make a new copy of $(A) inside $(B) (i.e. $(B)/$(A)).

And before you ask, I'd rather not rm -r $(B) before doing this if at all possible.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

违心° 2024-08-31 15:09:11

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

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

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

Adding the slash will copy the contents of $(A) into $(B), and create $(B) if it does not exist.

南七夏 2024-08-31 15:09:11

如果您使用的是 GNU cp,您可以这样做:

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

您也可以尝试 rsync

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

If you're using GNU cp, you can do:

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

You can also try rsync:

rsync -a $(A) $(B)/
层林尽染 2024-08-31 15:09:11

第一次使用 cp -r $(A) $(B) 怎么样,然后仅在以下情况下使用 copy-u 进行复制:来源比目的地新?有关更多信息,请参阅 cp 的手册页。

how about using cp -r $(A) $(B) for the first time, then use -u of copy to copy only when source is newer than destination?? see man page of cp for more.

左秋 2024-08-31 15:09:11

使用 rsync 代替 cp

Instead of cp, use rsync

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文