0%

Linux xargs 命令

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
2
3
4
5
$ cat test.txt

h e l l o w o r l d

H O W A R E Y O U

现在我们单行输出:

1
2
3
$ cat test.txt | xargs

h e l l o w o r l d H O W A R E Y O U

指定输出几个字符

也可以使用参数-n指定一行输出几个字符,比如

1
2
3
4
5
6
7
8
9
$ cat test.txt | xargs -n3

h e l
l o w
o r l
d H O
W A R
E Y O
U

这对于对仗的唐诗是个绝佳的选择,比如五言绝句。

指定分界符

使用-d参数可以指定定界符:

1
2
3
$ echo "name1,name2,name3,name4" | xargs -d,

name1 name2 name3 name4

可以认为简单快捷地初步解析了CSV格式的数据了。

同上,配合上-n选项,可以指定每行输出几项

1
2
3
4
$ echo "name1,name2,name3,name4" | xargs -d, -n2

name1 name2
name3 name4

结合管道的简单使用

前面说了很强大,到底如何强大呢,加入你有一个文件夹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
2
3
# cp /home/user/my_file.txt /home/user/1
# cp /home/user/my_file.txt /home/user/2
# cp /home/user/my_file.txt /home/user/3

这有点荒唐。相反,你可以用简单的一行命令解决问题:

1
# echo /home/user/1/ /home/user/2/ /home/user/3/ | xargs -n 1  cp /home/user/my_file.txt

其他的强大组合,以后再续。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道