的xargs命令可以使构建和执行命令变得更容易。如果您想对一组文件或用户运行相同的命令,xargs可以让这个过程更容易。这里有一个非常简单的例子xargs它创建或更新某些文件的更新时间。
echo file1 file2 file3 | xargs touch $ ls -l total 0 -rw-r——r——。1 shs shs 0 Oct 15 12:41 file1 -rw-r——r——. .1 shs shs 0 Oct 15 12:41 file2 -rw-r——r——. .1 shs shs 0 10月15日12:41 file3 . txt文件
下面的命令与此类似,但创建的文件名称中有空格,因为- d指定输入终止字符。
$ ls -l total 0 -rw-r——r——. $ ls -l total 0 -rw-r——r——. $ ls -l total 0 -rw-r——r——. $ ls1 shs shs 0 Oct 15 12:41 file1 -rw-r——r——. .1 shs shs 0 Oct 15 12:41 file2 -rw-r——r——. .1 shs shs 0 Oct 15 12:41 file3 -rw-r——r——. .1 shs shs 0 10月15日12:57 'my new file'
另一方面,上面所示的命令会创建空文件或更新文件上的日期/时间,但每个命令只运行一个命令(例如,“touch file1 file2 file3”和“touch 'my new file'”),这比上面所示的命令简单得多。添加到根据某些条件选择或查找文件的命令的末尾,使用xargs可能会更有用。下面是一个改变图片目录中所有png文件权限的例子:
$ find images -name "*.png" -type f | xargs chmod 640
查询命令行运行的命令xargs,添加- t选择:
$ echo file1 file2 file3 | xargs -t touch touch file1 file2 file3运行<==命令
美元找到图像- name“* . png”类型的f | xargs - t chmod 640 chmod 640图像/ Penguin_Simpson.png图片/ penguin_joined - 1. - png图像/ Penguin_purple.png图片/加入- 1. png图像/ Penguin_10quality.png图片/加入- 0. png图像/ penguin.png图片/ Penguin_50quality.png图片/ penguin0.png图片/ appended.png图片/ 45. / Penguin_flipped.png png图像penguin .png images/企鹅in_blur .png images/Mailing_label_2.png images/企鹅in_simpson_2 .png images/企鹅in_join- 0.png images/outfile.png images/企鹅in_45.png images/企鹅in4.png images/Mailing_label.png images/arrow.png
在下面的例子中,我们使用找到找到超过四周没有更新的文件xargs删除它们。
发现美元。-mtime + 28| xargs rm
这是一个查找和删除从当前目录开始的空文件的命令:
发现美元。-size 0 | xargs rm
当一些文件名中可能有空格时,可以用这样的命令来做同样的事情:
发现美元。-size 0 | xargs -I{} rm -v {} remove '。/空“删除”。/我的空文件
的xargsCommand常与找到根据许多不同的标准(如年龄、文件类型和权限)定位和处理文件。
在下面的示例中,我们将查看当前目录中的文件。的ls命令使用srp确保目录以斜杠结尾列出。的grep命令然后从传递到的列表中删除这些目录xargs.的xargs命令然后使用X(可以是任何单词或字符)作为循环变量,然后使用wc - c计算每个文件中的字符数。
$ ls -Srp | grep -v '/$' | xargs -I X wc -c X 64 file3 77我的新文件106 file2 361 file1 . $ ls
注意,循环字符需要包含在命令中的两个位置。
要查看每个当前登录的用户最近的三个登录,可以使用这样的命令:
$ | awk谁'{打印$ 1}’| xargs - x去年3 x啦pts / 0 192.168.0.24星期五10月15日12:35仍然登录啦pts / 0 192.168.0.9结婚10月13日发表-十七20(00:39)无分/ 0 192.168.0.9结婚10月13日15:56 - 16:26 (00:30)wtmp开始星期五2021年3月12日12:50:16 nemo分/ 1 192.168.0.24星期五10月15日第13章13节仍然登录nemo分/ 1 192.168.0.10星期二9月7日12:23 -14:13 (01:50) nemo pts/1 192.168.0.10 Sun Aug 22 11:10 - 12:01 (00:51) wtmp begins Fri Mar 12 12:50:16 2021
为了让命令为每个用户单独运行,需要进行循环。
要记住的关键事情之一是你使用的任何命令xargs将添加您传递到命令末尾的文本。您不能使用如下所示的命令并期望它显示2022年的前三个月,因为卡尔Command希望年份是最后一个参数:
$ echo 1 2 3 | xargs cal 2022 cal:错误用法
如果在最后没有2022,尝试同样的命令,你只会知道第三年的2月1日是星期四。
的xargs命令在提供一种运行命令的简单方法方面非常有用,特别是当与定位文件或指定需要检查的用户的命令结合使用时。