【问题标题】:Linux "install" command for wildcard installation用于通配符安装的 Linux“安装”命令
【发布时间】:2010-01-21 16:35:56
【问题描述】:

有没有办法使用“install”使用“通配符”模式一次安装多个文件(并且仍然让“安装”创建前导目录层次结构)?

我尝试了几种不同的方法:

  • install -D -t /dest/path /source/path/*.py
  • install -D -t /dest/path/ /source/path/*.py
  • install -D /source/path/*.py /dest/path
  • install -D /source/path/*.py /dest/path/

请帮助...每次试用都需要很长时间(我每次都使用pbuilder 来测试我的包)。

【问题讨论】:

    标签: linux installation


    【解决方案1】:

    在安装之前使用以下命令创建目录层次结构:

    install -d /dest/path
    

    然后使用:

    install -D /source/path/*.py /dest/path
    

    “安装”所有文件。

    【讨论】:

    • -D 标志的重点不是创建目标路径的前导父目录吗?如果它们已经使用先前的 install 调用创建,那么在后面的命令中似乎没有必要使用它。你能证明它的使用是合理的,还是假设在这种情况下可以删除它是安全的?
    【解决方案2】:

    也许在 install 调用周围使用一个简单的外部 for 循环?那么怎么样

    for f in /source/path/*.py; do \
        install -D -t /dest/path $$f; \
    done
    

    也就是说,您始终可以将逻辑从您的 Makefile、debian/rules 文件中取出...并独立测试它,而无需运行 pbuilder

    否则当然是使用 pbuilder 进行内部项目的道具!

    【讨论】:

    • +1:谢谢。我当然可以使用你的技术,但我只是通过反复试验发现了一个可行的解决方案。干杯。
    • @Dirk:即使我寻求更直接的解决方案 IMO,我也会接受您的回答。但是,嘿,有很多方法可以解决这个问题。干杯。
    • 是的,你的反应也很好。你真的创建 .deb 包吗?在这种情况下,dh_installdirs 非常简单——只需列出您需要的目录即可。 Debhelper 有许多有用的工具。
    【解决方案3】:

    我对 pbuilder 一无所知,但对于我的情况(用于 Arch Linux 的 PKGBUILD),我正在使用带有 find 的 BASH for 循环:

    for file in $(find source -type f -name *.py); do
        install -m 644 -D ${file} dest/${file#source/}
    done
    

    find 命令可以适应或多或少地具体说明要复制的内容。在上面的例子中,所有以 .py 结尾的常规文件都会被选中。

    【讨论】:

    • 如果您想使用 install 获得相当于 'cp -r ...' 的效果,这是最好的方法。如果您只想复制整个源目录结构(而不​​是只获取 *.py),只需去掉“-name *.py”即可。
    • 更好的是,您可以使用$(cd source && find -type f -name *.py) 来避免替换中的bashism。
    【解决方案4】:

    好的,也许我正在恢复一个旧帖子,但我认为这对未来的研究是值得的。从nharward 给出的示例(我也使用arch linux 和PKGBUILD)中,我进行了修改,以便我不必担心文件的模式/权限(-m),无论目录结构如何。

    for file in $(find ${srcdir} -type f); do
        install -m $(stat -c%a ${file}) -D ${file} ${pkgdir}/${file#${srcdir}}
    done
    

    【讨论】:

      【解决方案5】:

      man install 显示如果复制多个文件,DEST 必须存在。

      ... 在前三个表单中,将 SOURCE 复制到 DEST 或将多个 SOURCE(s) 复制到现有 DIRECTORY,同时设置权限模式和所有者/组。在第 4 种形式中,创建给定 DIRECTORY(ies) 的所有组件。 ...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-27
        • 2012-06-12
        • 1970-01-01
        • 2015-04-04
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        相关资源
        最近更新 更多