我有大约500个奇数数据文件位于目录中。我正在使用命令处理这些文件。问题是它连续地接收每个,当然任何实用程序也是如此 目前,我的流程所做的是产生大约500个流程,将它们分成10个批次,每个流程等待。像这样 。每个设计1个文件== 1个进程。
command1 <parameters> > log 2&>1&
command2 <parameters> > log 2&>1&
command3 <parameters> > log 2&>1&
command4 <parameters> > log 2&>1& /# ....till 10
wait
command11 <parameters> > log 2&>1&
command1 <parameters> > log 2&>1&
command1 <parameters> > log 2&>1& /# ...till 20
wait
command1 <parameters> > log 2&>1&
所以我不会同时砸掉系统。该命令实际上是另一系列shell和c代码,它们解析数据文件并进行一些检查,包括连接到Oracle。 我想重新设计它,以便每次运行命令时我都不会打开新的数据库连接。所以我们说有100个文件。我想打开10个DB连接,而不是100个单独的连接。 我想要的方法是先计算我有多少个文件。将它们除以10.每个分区是10个文件的“批处理” - 所以不是100个,而是150个文件,该过程应该自动创建15个目录。每个目录应该在其中移动10个文件然后 我可以跑
command1 <parameters> Directorypath > log 2&>1&
/# command can pick up all files in a directory or a single file
/# ct till command 10 ...
....
command10 <parameters> Directorypath > log 2&>1&
10个文件== 1个按此设计处理。
任何建议签署了关于如何做到这一点的命令。 ty
答案 0 :(得分:1)
使用GNU parallel,您可以并行地对目录中的所有文件运行命令,每次10个:
parallel --gnu -j 10 yourcommand --yourflags {} ::: *
它会运行
yourcommand --yourflags file1
yourcommand --yourflags file2
所以一个,一次十个。