【问题标题】:C/makefile, want to check 2 different dirs and copy subdirs if not existing. how?C/makefile,想要检查 2 个不同的目录,如果不存在则复制子目录。如何?
【发布时间】:2021-02-21 03:28:16
【问题描述】:

我会在这里尝试解释: 我想要在 makefile/c 中,喜欢从 dir A -> dir C 复制,然后复制 dir B -> dir C(仅当 B 中不存在 subdir 时!并且其他subs/文件已更新)。我不想强制复制会触发“更改”的原因,并且将为我不想要的文件触发重建。

注意! A 和 B 都可以有相同的子目录。所以可能就像最新的合并一样。

所以有些类似于: cp -ur ./A ./C cp -ur ./B ./C

注意! 如果 B 中不存在,我是否需要做一些 for 语句和复制? 怎么做? 喜欢: for dir in A C(但如何与 B 比较?)

【问题讨论】:

    标签: c makefile merge directory cp


    【解决方案1】:

    file(COPY ...) 命令应该满足您的目的:

    file(COPY ./A
         DESTINATION ./C)
    file(COPY ./B
         DESTINATION ./C)
    

    它总是以递归方式工作,并且会有效地进行更新,正如该页面上所写的那样:

    复制会保留输入文件的时间戳,如果文件存在于目标位置且具有相同的时间戳,则会对其进行优化。

    【讨论】:

    • 哦,太好了,我会试试看这个命令在我的环境中是否可行。
    • 但是,如果 A 子目录比 B 子目录新,那么即使它们存在于 B 中,也会使用 A?这决不能发生。感觉和这个完全一样:cp -ur ./A ./C cp -ur ./B ./C ?
    • 我不确定你的意思 - 是不是目录 A/Z 更新,但 A/Z/foo、A/Z/bar 与 B/Z/foo、B/Z/bar 具有相同的时间戳,但你没有不想复制任何东西?或者,正如您下面的代码所建议的那样,无论A/Z 和B/Z 时间戳如何,仅当B/Z/foo 存在并且与A/Z/foo 不同时才复制文件?
    • 很难准确解释,但我只复制 IF A 具有较新的时间戳,然后 C 对于仅存在于 A 中的文件,如果它们也存在于 B 中,则检查 C 中的 B 是否较新根本不复制该文件。我这里的例子只是整个解决方案的一部分,也就是说,只有在 B 中不存在时才复制。
    猜你喜欢
    • 2023-03-25
    • 2019-10-21
    • 2016-01-23
    • 2017-01-01
    • 1970-01-01
    • 2011-05-12
    • 2012-09-24
    相关资源
    最近更新 更多