gpt4 book ai didi

linux - 仅复制可执行文件(跨平台)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:36 25 4
gpt4 key购买 nike

我想将可执行文件从一个目录复制到另一个目录。

源目录包括各种我不关心的文件(构建工件)。我只想使用适用于 OS X 和 Linux 的 bash 脚本获取可执行文件。

可执行文件是指具有可执行权限的文件,并且会通过test -x $filename

我知道我可以编写一些 python 脚本,但我会引入对 python 的依赖(只是为了复制文件!)这是我真正想避免的事情。

注意:我似乎遇到过几个类似的问题,但答案似乎只适用于 Linux(因为这些问题专门针对 Linux 提出)。请不要将其标记为重复,除非重复的问题确实只是关于可执行文件的跨平台复制。

最佳答案

Your own answer概念上很优雅,但速度很慢,因为它至少为每个输入文件创建一个子进程 (test),并为每个 匹配 文件创建一个额外的子进程 (cp )。

这是一个更高效的 bash 替代方案:

  • 在 shell 代码中构建一个匹配输入文件的数组
  • 然后使用 cp单个调用复制它们。
#!/usr/bin/env bash

exeFiles=()
for f in "$src_dir"/*; do [[ -x $f && -f $f ]] && exeFiles+=( "$f" ); done
cp "${exeFiles[@]}" "$dest_dir/"
  • exeFiles=() 初始化存储匹配文件名的数组。
  • for f in "$src_dir"/* 遍历直接位于 $scr_dir 中的所有文件和目录;请注意 * 必须如何不加引号 才能发生通配(文件名扩展)。
    • [[ -x $f && -f $f ]] 确定手头的项目是否可执行(-x)和(常规)文件 -f;请注意,[[ ... ]] 中的双引号变量引用(大部分)是可选的。
    • exeFiles+=( "$f") 向数组追加一个新元素
  • "${exeFiles[@]}" 将生成的数组作为一个整体引用,并稳健地扩展为数组元素作为单独的参数 - 参见 Bash arrays .

关于linux - 仅复制可执行文件(跨平台),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44402916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com