Bash 通过xargs传递多个命令
我有一个文本文件,其中包含多个bash命令。类似的例子是这样的 commands.txt->Bash 通过xargs传递多个命令,bash,grep,multiprocessing,cat,xargs,Bash,Grep,Multiprocessing,Cat,Xargs,我有一个文本文件,其中包含多个bash命令。类似的例子是这样的 commands.txt-> mkdir test rm test '\t' mkdir test1 rm test1 '\t' mkdir test3 rm test3 '\t' 我想能够做的是从文本文件中获取所有rm命令,并使用xargs同时运行它们,一旦完成,获取所有mkdir命令并同时运行它们 我是从一个博客上得到这个主意的- grep'rm'commands.txt |读i时;不打印“%q\n”$i;完成| xargs-
mkdir test
rm test '\t'
mkdir test1
rm test1 '\t'
mkdir test3
rm test3 '\t'
我想能够做的是从文本文件中获取所有rm命令,并使用xargs同时运行它们,一旦完成,获取所有mkdir命令并同时运行它们
我是从一个博客上得到这个主意的-
grep'rm'commands.txt |读i时;不打印“%q\n”$i;完成| xargs--max procs=3-I CMD bash-c CMD
但是,在我的命令中,我有一个'\t',它没有转义它,而只是放一个t。我认为这与printf有关。有什么想法吗
但是,在我的命令中,我有一个'\t'和它的
不是逃避而是放一个t。我认为这是必须的
用printf
你很接近;这与读取的有关。请参见:
读取
..-r
如果
选项,反斜杠不作为转义字符。这个
反斜杠被认为是线条的一部分
因此,如果您将readi
更改为read-ri
闻起来很难闻,而且根本不安全,您可以很容易地用这种方式自杀。为什么要这样做?文本文件有一堆hadoop dfs-rmr命令和sqoop导入命令。我想先运行-rmr命令,然后运行所有sqoop命令parralell。如果我按顺序执行,则需要花费很长时间,并且其他还原作业无法使用资源。这可能是因为编写了一个糟糕的脚本,或者其他什么?无论如何,请看一下GNU Parallel,它比xargs
强大得多,应该可以轻松处理这一问题。查看-j、-max procs
选项和。只需将每组行读入一个单独的数组(使用mapfile
或循环,请参见)。