GNU Parallel 是一个强大的工具,它可以让你并行地运行命令行任务,从而提高处理大量数据的效率。以下是如何使用 GNU Parallel 从文件列表中运行可执行文件的基本步骤和相关概念:
假设你有一个包含文件名的文本文件 file_list.txt
,每行一个文件名,并且你想对每个文件运行一个名为 process_file
的可执行文件。
在大多数 Linux 发行版中,你可以使用包管理器来安装:
sudo apt-get install parallel # Debian/Ubuntu
sudo yum install parallel # CentOS/RHEL
你可以使用以下命令:
cat file_list.txt | parallel --jobs 4 process_file {}
这里 {}
是一个占位符,代表从输入列表中读取的每一行(即每个文件名)。--jobs 4
参数指定了并行运行的最大任务数,你可以根据你的 CPU 核心数进行调整。
假设 process_file
是这样一个小程序,它接受一个文件名作为参数并打印出文件的大小:
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
return 1;
}
struct stat st;
if (stat(argv[1], &st) == 0) {
printf("Size of %s: %ld bytes\n", argv[1], st.st_size);
} else {
perror("Error getting file size");
}
return 0;
}
编译这个程序:
gcc -o process_file process_file.c
然后创建一个文件列表 file_list.txt
:
file1.txt
file2.txt
file3.txt
最后,使用 GNU Parallel 运行:
cat file_list.txt | parallel --jobs 4 ./process_file {}
process_file
可执行文件有足够的权限,并且所有列出的文件都是可访问的。chmod +x process_file
赋予执行权限,并检查文件权限设置。--jobs
参数以匹配可用资源。--halt-on-error
或 --joblog
选项来跟踪和记录错误。通过以上步骤和注意事项,你应该能够有效地使用 GNU Parallel 来处理文件列表中的任务。
领取专属 10元无门槛券
手把手带您无忧上云