iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >在Linux上使用xargs命令的详细教程
  • 656
分享到

在Linux上使用xargs命令的详细教程

Linux上使用xargs命令Linuxxargs命令 2022-06-03 14:06:29 656人浏览 独家记忆
摘要

大家好,我是良许。 在使用 linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令。xargs 可以将一个命令的输出作为参数发送给另

大家好,我是良许。

在使用 linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令。xargs 可以将一个命令的输出作为参数发送给另一个命令。

在 Linux 中,所有标准的应用程序都有与之关联的三个数据流。分别是标准输入流(stdin),标准输出流(stdout)和标准错误流(stderr)。这些流通过文本来运行,我们使用文本将输入(stdin)发送到命令,然后响应(stdout)将会以文本形式显示在终端窗口上。错误消息也以文本的形式显示在终端窗口上(stderr)。

Linux 和类 Unix 操作系统的一大功能是可以将一个命令的标准输出流传递到另一个命令的标准输入流。第一个命令不会管它的输出是否写到了终端窗口,第二个命令也不会管它的输入是否来自键盘。

虽然所有 Linux 命令都有三个标准流,但是并不是所有命令都接受另一个命令的标准输出作为它的标准输入流的输入。因此我们无法通过管道将输入传给这些命令。

xargs是一个使用标准数据流构建执行管道的命令。通过使用xargs命令我们可以使 echormmkdir 等命令接受标准输入作为它们的参数。

xargs命令

xargs接受管道输入,也可以接受来自文件的输入。xargs 使用该输入作为我们指定的命令的参数。如果我们没有给xargs指定特定的命令,则默认使用 echoxargs 始终生成单行输出,即使输入的数据是多行的。

假如我们使用 ls-1(每行列出一个文件)选项,则会得到一列文件名称:


$ ls -1 ./*.sh

这一命令列出了当前目录中的 shell 脚本文件。

如果我们将输出结果通过管道传递给 xargs ,会得到什么样的效果?


$ ls -1 ./*.sh | xargs

可以看出来,输出以一长串文本的形式写到了终端上。由此可见,xargs 可以将输出作为参数传递给其他命令。

配合wc命令使用xargs

我们可以使用 xargs 命令轻松地让 wc 命令计算多个文件中的单词数,字符数和行数


$ ls *.c | xargs wc

执行结果如下:

命令运行结果显示了每个文件的统计信息以及总数。

这条命令执行了以下操作:

ls列出了所有的 .page 文件,并将该列表传给了xargsxargs 将所有文件名传递给 wcwc 将这些文件名作为命令行参数进行处理。

使用带有确认消息的xargs

我们可以使用 -p(交互)选项来让 xargs 提示我们是否要进行下一步的操作。

如果我们通过 xargs 将一串文件名的字符串传递给 touch 命令,touch 将创建这些文件。


$ echo 'one two three' | xargs -p touch

终端上显示将要执行的命令,xargs 等待我们输入 yYnN 并按 Enter 来响应。如果只按了 Enter ,则视为 n。只有当我们当输入 yY 时才执行该命令。

我们按下y和 Enter ,然后使用ls用来检查文件是否已经创建。


$ ls one two three

将xargs与多个命令一起使用

我们可以用-I(初始参数)选项来将 xargs 和多个命令一起使用。这一选项定义了替换字符串。在命令行中的任何出现替换字符串的位置,都会插入我们提供给 xargs 的值 。

有点抽象,我们以一个实例来进行讲解。

我们先用 tree 命令查看当前目录中的子目录。该 -d(directory)选项使 tree 命令忽略文件,只输出目录。


$ tree -d

现在只有一个子目录 images 。

在 directories.txt 这个文件中,我们有一些想要创建的目录的名称。我们先用 cat 查看其中的内容。


$ cat directories.txt

我们把这些内容作为输入数据传给 xargs ,执行以下的命令:


$ cat directories.txt | xargs -I % sh -c 'echo %; mkdir %'

这条命令执行了以下操作:

cat directories.txt :将 directrories.txt 文件的内容(所有要创建的目录名称)传给 xargs。xargs -I % :定义了替换字符串 %。sh -c:启动一个新的子shell。-c(commond)让 shell 读取命令。'echo %; mkdir %':每个都会被替换为 xargs 传过来的目录名称 。echo 命令打印目录名称,mkdir 命令创建目录。

命令执行结果:

我们可以用 tree 验证已创建是否已创建了目录。


$ tree -d

将文件复制到多个位置

我们可以使用 xargs 命令来用一个命令将文件复制到多个位置。

首先,通过管道将两个目录的名称传给 xargs 。并且让 xargs 一次只将其中一个参数传递给正在使用的命令。

想要调用 cp 两次,每次各使用两个目录中的一个作为命令行参数,我们可以通过将 xargs-n(max number)选项设置为 1 来实现。

这里还使用了-v(verbose 详细信息)选项,让 cp 反馈正在执行的操作。


$ echo ~/dir1/ ~/dir2/ | xargs -n 1 cp -v ./*.c

我们将文件复制到了两个目录,一次复制一个目录。cp 反馈了详细信息,让我们看到进行了哪些操作。

删除嵌套目录中的文件

如果文件名中包含空格或者其他特殊字符(例如换行符),xargs 将无法正确解释这些文件名。我们可以使用 -0(空终止符)选项来解决这一问题。此时, xargs 将使用 null 字符作为文件名最终的分隔符。

这里我们以 find 命令为例。find 有自己的选项来处理文件名中的空格和特殊字符,即 -print0(全名,空字符)选项。


$ find . -name "*.png" -type f -print0 | xargs -0 rm -v -rf "{}"

这一命令执行了以下操作:

find . -name “*.png” :find 将从当前目录中搜索名称和 *.png 相匹配的对象,type -f 指定了只搜索文件。-print0:名称将以空字符结尾,并且保留空格和特殊字符。xargs -0:xargs 也将考虑文件名以空值结尾,并且空格和特殊字符不会引起问题。rm -v -rf "{}":rm 将反馈正在进行的操作(-v),递归进行操作(-r),不发送错误提示而直接删除文件(-f)。每个文件名替换 "{}"。

命令执行之后,将搜索了所有子目录,删除了其中匹配的文件。

删除嵌套目录

假设我们要删除一组嵌套的子目录,先用tree进行查看。


$ tree -d


$ find . -name "level_one" -type d -print0 | xargs -0 rm -v -rf "{}"

这条命令使用 find 在当前目录中递归搜索,搜索的目标是名为 level_one 的目录,然后将目录名通过xargs传递给 rm

这个命令和前面的命令之间的区别是,搜索的项目是最顶层目录的名称,而且-type d说明要查找的目录,而不是文件。

每个目录的名称都在删除时打印出来。我们可以用tree再查看效果:


$ tree -d

所有嵌套的子目录已删除了。

删除一种文件类型以外的所有文件

我们可以使用 findxargsrm 删除所有类型的文件而只保留一种我们想要保留的类型的文件。这需要提供想要保留的文件类型。

-not 选项让 find 返回所有与搜索模式不匹配的文件名。我们此时再次使用 xargs-I (初始参数)选项。这次定义的替换字符串为 {} 。这和我们之前使用的替换字符串 % 的效果是相同的。


$ find . -type f -not -name "*.sh" -print0 | xargs -0 -I {} rm -v {}

命令执行之后,我们再通过 ls 来确认结果。可以看到,目录中只剩下了与 *.sh 相匹配的文件。


$ ls -l

使用Xargs创建压缩文件

我们可以使用 find 命令来搜索文件,并通过 xargs 将文件名传给 tar 命令来创建压缩文件。

我们将在当前目录中搜索 * .sh 文件。


$ find ./ -name "*.sh" -type f -print0 | xargs -0 tar -cvzf script_files.tar.gz

命令执行结果将列出了所有 .sh 文件,并创建了压缩文件。

总结

到此这篇关于如何在Linux上使用xargs命令的文章就介绍到这了,更多相关Linux上使用xargs命令内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 在Linux上使用xargs命令的详细教程

本文链接: https://www.lsjlt.com/news/11557.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Linux上使用xargs命令
    这篇文章主要介绍怎么在Linux上使用xargs命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢在这种情况下,我们就...
    99+
    2023-06-15
  • Linux系统中使用xargs命令的教程
    本篇内容主要讲解“Linux系统中使用xargs命令的教程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux系统中使用xargs命令的教程”吧!xargs命令有两个要点。第一,你必须列出目...
    99+
    2023-06-13
  • Linux上如何使用xargs命令
    这篇文章给大家分享的是有关Linux上如何使用xargs命令的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种...
    99+
    2023-06-28
  • Linux的xargs命令怎么使用
    这篇文章主要介绍“Linux的xargs命令怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux的xargs命令怎么使用”文章能帮助大家解决问题。Linux常用命令xargs是 exec...
    99+
    2023-06-28
  • Linux中xargs命令的使用方法
    这期内容当中小编将会给大家带来有关Linux中xargs命令的使用方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。linux命令可以从两个地方读取要处理的内容,一个是通过命令行参数,一个是标准输入。例如...
    99+
    2023-06-09
  • Linux中如何使用xargs命令
    这篇文章主要为大家展示了“Linux中如何使用xargs命令”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中如何使用xargs命令”这篇文章吧。Linux常用命令xargs 命令 是给...
    99+
    2023-06-28
  • linux中xargs命令的用法
    这篇文章主要介绍“linux中xargs命令的用法”,在日常操作中,相信很多人在linux中xargs命令的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux中xargs命令的用法”的疑惑有所帮助!...
    99+
    2023-06-05
  • Linux xargs命令的用法介绍
    本篇内容介绍了“Linux xargs命令的用法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!xargs 是给命令传递参数的一个过滤器,...
    99+
    2023-06-05
  • Linux中的xargs命令怎么用
    这篇文章主要介绍Linux中的xargs命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Linux系统中,find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,xa...
    99+
    2023-06-28
  • 如何使用linux shell脚本xargs命令
    本篇内容主要讲解“如何使用linux shell脚本xargs命令”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用linux shell脚本xargs命令”吧!xargs是给命令传递参数的...
    99+
    2023-06-09
  • linux系统中如何使用xargs命令
    这篇文章主要介绍linux系统中如何使用xargs命令,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具,xargs 可以将管道或标准输入(stdin)数...
    99+
    2023-06-28
  • Linux命令中如何使用find和xargs
    本篇文章给大家分享的是有关Linux命令中如何使用find和xargs ,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 使用 find 可以查...
    99+
    2023-06-13
  • linux中xargs命令的使用方式是什么
    linux中xargs命令的使用方式是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数,默认...
    99+
    2023-06-28
  • 详细介绍Linux telnet命令的使用
    这篇文章给大家分享的是有关详细介绍Linux telnet命令的使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。用户使用telnet命令进行远程登录。该命令允许用户使用telnet协议在远程计算机之间进行通信,...
    99+
    2023-06-16
  • 如何在 Linux 上使用 Go 存储:一份详细教程
    在开发过程中,如何高效地存储和管理数据是非常重要的。而 Go 语言作为一门强类型的编程语言,其在数据存储和管理方面也有着出色的表现。在本篇文章中,我们将详细介绍如何在 Linux 上使用 Go 存储数据,并附带演示代码。 第一步:安装 M...
    99+
    2023-11-06
    存储 linux 教程
  • Linux----tr命令详细使用方法
    【原文链接】Linux----tr命令详细使用方法 文章目录 一、tr命令使用方法1.1 tr命令的作用1.2 tr命令格式1.3 tr命令常用的选项1.4 常用的匹配字符串 二、tr命令...
    99+
    2023-10-01
    linux 运维 服务器
  • linux系统中xargs命令的使用方式是什么
    这期内容当中小编将会给大家带来有关linux系统中xargs命令的使用方式是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。xargs 是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数...
    99+
    2023-06-05
  • linux的jstack,jmap命令的正确安装附详细教程
    先执行命令 yum list --showduplicate su root yum list --showduplicate|grep -i "java*"   yum install java-11-openjdk-devel.x86...
    99+
    2023-09-11
    linux 运维 服务器
  • 在Windows 8上禁用UEFI安装Linux详细教程
      现在买电脑,一般都是预装 Windows7或者Windows8 的系统,Windows8一般都是 Windows8 或 Windows8.1。从 Windows8 开始,微软用 UEFI 取代了 BIOS。尽管 UE...
    99+
    2023-06-07
    禁用uefi windows 8.1 uefi 教程 UEFI
  • Linux tree命令详细用法
    本篇内容介绍了“Linux tree命令详细用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 前言本文主要讲解Linux系统上的tre...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作