【发布时间】:2016-03-06 07:25:45
【问题描述】:
我有一个包含多个 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 |读我的时候;做 printf "%q\n" "$i";完成 | xargs --max-procs=3 -I CMD bash -c CMD
这种工作但是在我的命令中我确实有一个'\ t'并且它没有转义它而是只是放了一个 t。我认为这与printf有关。有什么想法吗?
【问题讨论】:
-
闻起来像XY problem,而且一点都不安全,你可以用这种方式轻松拍摄自己。为什么要这样做?
-
好吧,文本文件有一堆 hadoop dfs -rmr commands 和 sqoop import commands 。我想先运行 -rmr 命令,然后再运行所有 sqoop 命令 parralell。如果我按顺序执行此操作,则需要很长时间,并且资源无法用于其他还原作业。
-
脚本写得不好,还是什么?
-
无论如何,看看 GNU Parallel,它比
xargs强大得多,应该轻而易举地处理这个问题。看看-j,--max-procs选项和no command means arguments are commands。您只需要将每组行读入一个单独的数组(使用mapfile或循环,请参阅BashFAQ/001)。
标签: bash grep multiprocessing cat xargs