如何在 MacBook 上使用并行命令来利用多核并行性?

2023-12-11

我经常使用findLinux 和 macOS 上的命令。我刚刚发现了这个命令parallel,我想将它与find如果可能的话命令因为find当我们在大目录中搜索特定文件时,命令需要很长时间。

我搜索过这些信息,但结果不够准确。似乎有很多可能的语法,但我无法判断哪一种是相关的。

我如何结合parallel命令与find命令(或任何其他命令)以便从 MacBook 上的所有 16 个内核中受益?

Update

From @OleTange,我想我已经找到了我感兴趣的那种命令。

所以,要了解更多关于这些命令的信息,我想了解字符的用处{}and :::在以下命令中:

parallel -j8 find {} ::: *

1) 这些字符是强制性的吗?

2)如何插入经典选项find命令就像-type f or -name '*.txt ?

3)目前我已经在我的中定义了.zshrc功能 :

ff () {
    find $1 -type f -iname $2 2> /dev/null
}

如何对固定数量的作业执行等效操作(我也可以将其设置为 shell 参数)?


当您的工作是CPU 限制(CPU 完成工作,外围设备大部分空闲)但是在这里,您正在尝试提高任务的性能,该任务是I/O 限制(CPU 大部分时间处于空闲状态,等待繁忙的外设)。在这种情况下,增加并行性只会增加拥塞,因为多个任务将争夺它们之间已经匮乏的 I/O 带宽。

在 macOS 上,系统已经对您的所有数据进行了索引(包括文字处理文档、PDF、电子邮件等的内容);右上角的菜单栏上有一个友好的放大镜,您可以在其中访问更快、更通用的搜索,称为“Spotlight”。 (尽管我同意一些更复杂的控制find缺失;当“用户友好”的设计猜测我想要什么并且猜测错误时,它就会妨碍我。)

一些 Linux 发行版提供类似的功能;我希望这成为当今任何带有 GUI 的标准,尽管系统之间的细节会有所不同。

在任何类 Unix 系统上更传统的解决方案是locate命令,执行类似但更有限的任务;它会在文件名上创建一个(非常快速的)索引,所以你可以说

locate fnord

非常快速地获取每个名称匹配的文件fnord。索引只是一个结果的副本find从昨晚开始运行(或者您安排后端运行)。该命令已安装在 macOS 上,但如果您想使用它,则必须启用后端。 (赶紧跑locate locate以获得进一步的指示。)

例如,如果您发现自己经常寻找具有特定权限集和特定所有者的文件,您可以自己构建类似的东西(这些功能不是locate记录);只需每晚(或每小时等)运行一次find它将这些特征收集到数据库中,甚至只是文本文件中,然后您几乎可以立即进行搜索。

对于并行运行作业,您实际上并不需要 GNUparallel,尽管它确实为许多用例提供了许多便利和增强功能;你已经拥有了xargs -P. (The xargs在源自 BSD 的 macOS 上比 GNU 受到更多限制xargs你会在许多 Linux 上找到它;但它确实有-P选项。)

例如,以下是如何运行八个并行find实例与xargs -P:

printf '%s\n' */ | xargs -I {} -P 8 find {} -name '*.ogg'

(这假设通配符与包含单引号或换行符或其他恶作剧的目录不匹配;GNUxargs-0修复大量此类极端情况的选项;那么你会用'%s\0'作为格式字符串printf.)


As the parallel文档很容易解释,它的一般语法是

parallel -options command ...

where {}将被替换为当前输入行(如果缺少,它将隐式添加到末尾)command ...)和(显然是可选的):::特殊标记允许您在命令行上指定输入源而不是标准输入。

这些特殊标记之外的任何内容都会逐字传递,因此您可以添加find只需按字面指定即可随心所欲地选择选项。

parallel -j8 find {} -type f -name '*.ogg' ::: */

我不说话zsh但针对常规 POSIX 进行了重构sh你的函数可能是这样的

ff () {
    parallel -j8 find {} -type f -iname "$2" ::: "$1"
}

尽管我可能会切换参数,以便您可以指定名称模式和要搜索的文件列表,à la grep.

ff () {
    # "local" is not POSIX but works in many sh versions
    local pat=$1
    shift
    parallel -j8 find {} -type f -iname "$pat" ::: "$@"
}

但同样,您可能应该停止旋转磁盘来查找已索引的内容,而不是提供便利。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 MacBook 上使用并行命令来利用多核并行性? 的相关文章

  • 在 Docker 容器中以主机用户身份运行

    在我的团队中 我们在进行开发时使用 Docker 容器在本地运行我们的网站应用程序 假设我正在开发 Flask 应用程序app py具有依赖关系requirements txt 工作流程大致如下 I am robin and I am in
  • C++:Linux平台上的线程同步场景

    我正在为 Linux 平台实现多线程 C 程序 其中我需要类似于 WaitForMultipleObjects 的功能 在搜索解决方案时 我发现有一些文章描述了如何在 Linux 中实现 WaitForMultipleObjects 功能
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 在 Xcode 9 上切换分支

    我无法找到使用 Xcode 9 切换分支的菜单项 工作副本菜单似乎已经消失 有任何想法吗 Xcode 9 Xcode 8 Press 2 to open the new Source Control Navigator 右键单击master
  • 尝试安装 AWS CLI,卡在一个步骤上

    我正在尝试为 mac 命令行安装 aws 我想我不明白我需要做什么 我在终端上安装了带有 wget 的 aws 捆绑包 解压后它完成了所有操作 但是当我需要配置我的凭据时 什么也没有出现把aws配置 以下是说明 http docs aws
  • 如何反汇编、修改然后重新组装 Linux 可执行文件?

    无论如何 这可以做到吗 我使用过 objdump 但它不会产生我所知道的任何汇编器都可以接受的汇编输出 我希望能够更改可执行文件中的指令 然后对其进行测试 我认为没有任何可靠的方法可以做到这一点 机器代码格式非常复杂 比汇编文件还要复杂 实
  • 可以作为命令行参数传递多少数据?

    在 Linux 下生成进程时可以发送多少字节作为命令行参数 gahooa 推荐了一篇好文章http www in ulm de mascheck various argmax http www in ulm de mascheck vari
  • 在 MAC OSX 上使用 CMake 生成 .bundle 文件

    我想生成一个可执行文件 bundle文件于Mac OSX 10 6 8 using CMake 我的 CMakeLists txt 文件如下所示 cmake minimum required VERSION 2 8 PROJECT TEST
  • 为什么默认情况下不启用 arp 忽略/通告 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个需要经验才能回答的具体问题 为什么 arp ignore arp announce 在 Linux 安装 例如 debian 上默认不启用 有
  • 左右 mac“命令”键的配置不同吗?

    我想知道是否可以将右侧的 mac 命令 设置为像 ctrl 键一样 但保留左侧 命令 键的默认功能 谢谢 有一个非常棒的应用程序 称为 Ukelele 免费 不幸的是 它无法区分左右命令键 然而 我最近发现了一个更好的应用程序 名为 Con
  • Core Data 与 SQLite 3 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 了解 Linux oom-killer 日志

    我的应用程序被 oom killer 杀死了 它是在实时 USB 上运行的 Ubuntu 11 10 无需交换 PC 具有 1 Gig 的 RAM 唯一运行的应用程序 除了所有内置的 Ubuntu 东西 是我的程序 flasherav 请注
  • 如何在 Mac 上运行 virtualenv python

    我正在尝试使用 virtualenv 在我的 mac 上创建虚拟 python 环境 我已经下载了 virtualenv 但是我无法运行它 因为即使我提供了正确的路径 它也找不到我的 python3 安装路径 这是我运行的命令和响应 vir
  • OSX 上的 Java 7 使用 jnlp/webstart 时出现文件名编码问题

    我遇到了这个问题 经过几天的搜索和解决方法尝试均未成功 我现在有一个由 jnlp webstart 分发的内部 java swing 程序 在 osx 和 windows 计算机上 除其他外 它还从 WebDav 下载一些文件 最近 在装有
  • pthread_self() 返回的线程 ID 与调用 gettid(2) 返回的内核线程 ID 不同

    这句话来自于pthread self 的手册页 http linux die net man 3 pthread self 那么 我应该根据什么来决定是否应该使用pthread self or gettid确定哪个线程正在运行该函数 两者都
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 如何使用 Clojure 在命令行中更改目录?

    我正在寻找的是 Windows 命令行中的这种命令行交互 C temp1 gt clj some script clj C temp2 gt 其中 some script clj 包含类似以下内容 cd c temp2 那么问题来了 如何实
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec

随机推荐

  • 如何将多边形绑定到 WPF 中现有的 PointCollection?

    我当前的实现不会在表单上显示任何内容 即使我认为有界的集合有数据 我在调试中检查 这是一些代码 public event PropertyChangedEventHandler PropertyChanged PointCollection
  • 使用 Dart/Flutter 查询包含 Cloud Firestore 中保存的 ID 的地图

    如何使用 Dart Flutter 获取存储在 Cloud Firestore 中的地图 我尝试过这个 但它只适用于 Array Firestore instance collection posts orderBy createdAt d
  • 我应该如何更新过时的 fork?

    几个月前 我分叉了一个存储库 进行了更改并提交了拉取请求 该请求最终被 master 接受 从那以后 我的分叉代码在我的硬盘上就没有受到任何影响 现在 我想再次为同一个存储库做出贡献 我的 fork 中的代码与 master 不同步 因为它
  • ADB服务器无法启动android

    我已经安装了 adt 捆绑包 eclipse 但是 我似乎无法运行 AVD 我有问题 ADB server didn t ACK failed to start daemon 我已经搜索了如何解决它 我已经阅读并输入adb kill ser
  • 将 Excel 导入 Panda Dataframe

    以下只是 Coursera 数据科学作业的开始 我希望这不是一件小事 但我对此迷失了方向 找不到答案 我被要求将 Excelfile 导入 panda 数据框并随后对其进行操作 该文件可以在这里找到 http unstats un org
  • Makefile 的运行方式与 shell 命令不同? (使用猫时)

    我正在尝试将手动运行的命令转换为 Makefile 目标 但出现与我的使用相关的错误cat 我想我正在尝试打开文件 cat 而不是cat ing 实际文件 queries sql clean ls sql sql sort V while
  • 捕获所选 UI 菜单选项的名称

    我正在尝试将条目添加到 Google 表格的菜单中 ui createMenu Push to Sheet addItem Texas menuItem addItem Illinois menuItem addToUi 在回调函数中men
  • 新日期的日期无效("YYYY-MM-DDThh:mm:ss");实例化

    我正在使用 Titan 它是一个基于 JavaScript 的移动开发框架 我有一个数组 其中的单元格中包含一个表示 YYYY MM DD HH mm ss 格式的 日期和时间 字符串的字符串 NightsArray i 3 返回 2014
  • Hibernate 5 序列生成问题

    我正在从 3 迁移到 hibernate 5 我发现序列生成器在 Hibernate 5 中无法正常工作 我用最小值 1000 定义了序列并递增 1 但是当我尝试创建新的实体记录时 我看到插入的记录的 id 为 951 看起来 id 与实际
  • 将列表编组为 XML 是可行的 - 但如何解组呢?

    我可以使用 Wrapper 类来编组 ObservableList 如下所示 但我无法将其解组回之前的包装类 这个想法是 我有一个 费用 的可观察列表 我将此列表放入包装类中 并将该类保存为 XML 结果如下
  • FCM 主题限制以及旧的未使用主题的过期/失效?

    我使用 FCM 主题已经有一段时间了 但文档非常有限 大多数搜索都会指向相同的页面 所以我在这里询问 希望有人在该主题上有足够的经验来回答我的问题 我想知道允许的主题数量是否有限制以及不再使用的主题会怎样 我的意思是 什么时候主题会无效 我
  • IBM Worklight 6.1 - 项目无法初始化,因为项目数据库模式来自 N/A 版本

    当我尝试将 war 文件部署到应用程序服务器时 收到以下错误消息 错误 500 javax servlet ServletException Worklight 控制台 初始化失败 记录的异常 java lang RuntimeExcept
  • strsplit 和 lapply

    我在表单的某些文本中有一个字符串 12 34 77 包括引号 我需要将每个数字的值放入列表中 我尝试使用lapply and strsplit control2 lapply strsplit data values as numeric
  • 从 aria-label selenium webdriver 中提取文本 (python)

    现在我正在开发一个程序 该程序接受用户输入的问题和答案 将它们分成单独的 q 和 a 列表 然后根据问题或答案自动回答问题 由于使用 机器人 的地方是在线的 我使用的是 Selenium Web 驱动程序 这在尝试读取 aria 标签时给我
  • 是否可以使用图像代替 SVG 路径的笔画?

    首先 我知道这个问题是very如同this问题 但我尝试用一 个来实现该解决方案SVG PATH但它不起作用 我还知道另一种解决方案是循环PATH并设置FILL of the PATH如上所述here以及网络上的其他地方 不过 我已经动画化
  • 在 Angularjs 中使用 GeoChart

    如何在 Angular 中使用 Google GeoChart 我想在 geoChart 中注入角度数据 就像 Javascript 中的示例一样https developers google com chart interactive d
  • 获取由向量组成的矩阵表示的矩阵的第一列

    假设我代表一个矩阵foo值使用std vector int rows 5 int cols 10 auto foo vector
  • 使用flask_security时,flask_sqlalchemy对象没有添加属性

    我正在尝试使用flask security添加一些角色 用户 但是当我尝试使用以下命令创建用户时遇到了这个问题SQLAlchemySessionUserDatastore 所以我首先从创建开始user datastore像guide db
  • 模式也与连字符匹配

    我有一段像这样的 Perl 代码 模式匹配 var
  • 如何在 MacBook 上使用并行命令来利用多核并行性?

    我经常使用findLinux 和 macOS 上的命令 我刚刚发现了这个命令parallel 我想将它与find如果可能的话命令因为find当我们在大目录中搜索特定文件时 命令需要很长时间 我搜索过这些信息 但结果不够准确 似乎有很多可能的