如何在Linux里使用xargs命令

你是否遇到过这样的情况,需要一遍又一遍地对多个文件执行同样的操作?如果有过,那你肯定会深有感触这是多么的无聊和效率低下。还好有种简单的方式,可以在基于Unix的操作系统中使用xargs命令解决这个烦恼。通过这个命令你可以有效地处理多个文件,节省你的时间和精力。在这篇教程中,你可以学到如何一次性对多个文件执行命令或脚本操作,再也不用担心像单独处理无数个日志或数据文件那样吓人的任务了。

如何在Linux里使用xargs命令

xargs命令有两个要点。第一,你必须列出目标文件。第二,你必须指定对每个文件需要执行的命令或脚本。

这篇教程会涉及三个应用场景,xargs命令被用来处理分布在不同目录下的文件:

计算所有文件的行数

打印指定文件的第一行

对每个文件执行一个自定义脚本

请看下面这个叫xargstest的目录(用tree命令以及-i和-f选项显示了目录树结构,这样可以避免缩进显示而且每个文件都会带有完整路径):

$ tree -if xargstest/

如何在Linux里使用xargs命令

这六个文件的内容分别如下:

如何在Linux里使用xargs命令

这个xargstest目录,以及它包含的子目录和文件将用在下面的例子中。

场景1:计算所有文件的行数

就像之前提到的,使用xargs命令的第一个要点是一个用来运行命令或脚本的文件列表。我们可以用find命令来确定和列出目标文件。选项-name 'file??'指定了xargstest目录下那些名字以"file"开头并跟随两个任意字符的文件才是匹配的。这个搜索默认是递归的,意思是find命令会在xargstest和它的子目录下搜索匹配的文件。

$ find xargstest/-name 'file??'

xargstest/dir3/file3B

xargstest/dir3/file3A

xargstest/dir1/file1A

xargstest/dir1/file1B

xargstest/dir2/file2B

xargstest/dir2/file2A

我们可以通过管道把结果发给sort命令让文件名按顺序排列:

$ find xargstest/-name 'file??'| sort

xargstest/dir1/file1A

xargstest/dir1/file1B

xargstest/dir2/file2A

xargstest/dir2/file2B

xargstest/dir3/file3A

xargstest/dir3/file3B

然后我们需要第二个要素,就是需要执行的命令。我们使用带有-l选项的wc命令来计算每个文件包含的换行符数目(会在输出的每一行的前面打印出来):

$ find xargstest/-name 'file??'| sort | xargs wc -l

1 xargstest/dir1/file1A

2 xargstest/dir1/file1B

3 xargstest/dir2/file2A

4 xargstest/dir2/file2B

5 xargstest/dir3/file3A

6 xargstest/dir3/file3B

21 total

可以看到,不用对每个文件手动执行一次wc -l命令,而xargs命令可以让你在一步里完成所有操作。那些之前看起来无法完成的任务,例如单独处理数百个文件,现在可以相当轻松地完成了。

场景2:打印指定文件的第一行

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/17266.html