将所有* .txt文件并行传递给Python脚本


1

我有一个Python脚本,它采用.txt文件并对其执行某些操作。我需要一个Linux shell命令,它将在整个系统中搜索.txt文件,并将.txt文件传递给我的Python脚本。我想xargs我可以运行一个文件的进程来加速程序。我怎样才能做到这一点?

Answers:


0

我相信

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动作。


0

使用GNU Parallel,您可以做到:

find . -type f -name "*\.txt" | parallel python myscript.py

它将为每个CPU核心运行一个作业。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.