考虑这个命令:
ls /mydir/*.txt | xargs chown root
Run Code Online (Sandbox Code Playgroud)
目的是将所有文本文件的所有者更改mydir
为root
问题是,如果没有.txt
文件,mydir
则xargs会发出一条错误,指出没有指定路径.这是一个无害的例子,因为被抛出一个错误,但在某些情况下,如在我需要在这里使用的脚本,假设一个空白的路径是当前目录.因此,如果我/home/tom/
从那时起运行该命令,如果没有结果,ls /mydir/*.txt
并且所有文件/home/tom/
都将其所有者更改为root.
那么我如何让xargs忽略空结果呢?
我有一个工作,从一个\n分隔流中读取数据,并将信息一次发送到xargs处理1行.问题是,这不够高效,但我知道如果我改变程序使得xargs执行的命令一次发送多行而不是一行,它可以大大提高我的脚本的性能.
有没有办法做到这一点?我没有任何运气与各种组合-L
或-n
.不幸的是,我认为我也坚持-I
参数化输入,因为如果我不使用我的命令似乎不想采用标准输入-I
.
基本的想法是我正在尝试使用xargs模拟小批量处理.
从概念上讲,这里有类似于我目前所写的内容
contiguous-stream | xargs -d '\n' -n 10 -L 10 -I {} bash -c 'process_line {}'
^在上面,process_line
很容易改变,以便它可以同时处理多行,而这个功能现在是瓶颈.对于强调,以上,-n 10
并且-L 10
似乎没有做任何事情,我行仍在处理一次一个.