Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 通过xargs传递多个命令_Bash_Grep_Multiprocessing_Cat_Xargs - Fatal编程技术网

Bash 通过xargs传递多个命令

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-

我有一个文本文件,其中包含多个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--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
或循环,请参见)。