我有一个 Python 脚本,它接受一个 .txt 文件并对其进行处理。我需要一个 Linux shell 命令,它将在整个系统中搜索 .txt 文件并将 .txt 文件传递给我的 Python 脚本。我想我xargs
可以对文件运行一个进程来加快程序的速度。我该怎么做?
答案1
我相信
find / -type f -name "*\.txt" -exec script.py '{}' \;
将在 / 中或 / 下面的每个 txt 文件上运行 script.py,从而导致脚本的调用次数与找到的文件数一样多。
现在,如果您想同时将多个找到的文件传递给您的脚本,您可以执行以下操作:
find / -type f -name "*\.txt" -exec script.py '{}' +
来自find(1) 手册页:
-exec 操作的这一变体在选定的文件上运行指定的命令,但命令行是通过在末尾附加每个选定的文件名来构建的;命令的总调用次数将远远少于匹配的文件数。命令行的构建方式与 xargs 构建其命令行的方式大致相同 [...]
您显然可以使用 xargs 实现同样的效果,但语法不太简洁,这就是我更喜欢使用 find 的 -exec 操作的原因。
答案2
使用 GNU Parallel 您可以执行以下操作:
find . -type f -name "*\.txt" | parallel python myscript.py
它将每个 CPU 核心运行一项作业。