Linux xargs命令
xargs
是一个非常非常强大的命令,是eXtended ARGuments的缩写。
可以取一个命令的输出作为另一个命令的参数。
默认的用法为初始化输入字符,加上一些参数就能达到超级赞的效果(这里说的参数一般是和管道一起使用)。
官方定义为:
xargs - build and execute command lines from standard input
含义为从标准输入构建和执行命令。
用法为:
1 | $ xargs [options] [command [initial-arguments]] |
常用参数为:
-n max-args
,--max-args=max-args
:后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的--delimiter=delim
,-d delim
:默认的分隔符是回车,这里重定义了分隔符修改的是xargs的分隔符。
基本用法
读取输入数据重新格式化后输出。比如一个测试文件,内容如下:
1 | $ cat test.txt |
现在我们单行输出:
1 | $ cat test.txt | xargs |
指定输出几个字符
也可以使用参数-n指定一行输出几个字符,比如
1 | $ cat test.txt | xargs -n3 |
这对于对仗的唐诗是个绝佳的选择,比如五言绝句。
指定分界符
使用-d
参数可以指定定界符:
1 | $ echo "name1,name2,name3,name4" | xargs -d, |
可以认为简单快捷地初步解析了CSV格式的数据了。
同上,配合上-n选项,可以指定每行输出几项
1 | $ echo "name1,name2,name3,name4" | xargs -d, -n2 |
结合管道的简单使用
前面说了很强大,到底如何强大呢,加入你有一个文件夹photo,里面有几百个文件夹,可能还有各种文件,其中有一些jpg后缀的特别想保存,怎么办,一个命令搞定。
接下来这个命令就是找出所有的.jpg格式的图片,并将其打包归档。
1 | $ find /the/path/of/photo -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz |
8. 复制文件到多个目录
通常使用 cp 命令进行文件复制。复制文件通常看起来类似:
1 | # cp /path-to-file/my_file.txt /path-to-new-directory/ |
现在假设你需要复制该文件到多个目录:
1 | cp /home/user/my_file.txt /home/user/1 |
这有点荒唐。相反,你可以用简单的一行命令解决问题:
1 | # echo /home/user/1/ /home/user/2/ /home/user/3/ | xargs -n 1 cp /home/user/my_file.txt |
其他的强大组合,以后再续。