如何在linux上使用xargs命令

需要将一些Linux命令串在一起,但其中一个不接受管道输入?xargs可以获取一个命令的输出,并将其作为参数发送到另一个命令。...

需要将一些Linux命令串在一起,但其中一个不接受管道输入?xargs可以获取一个命令的输出,并将其作为参数发送到另一个命令。

所有标准Linux实用程序都有三个与之相关联的数据流。它们是标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。

这些流处理文本。我们使用文本向命令发送输入(stdin),响应(stdout)作为文本写入终端窗口。错误消息也作为文本(stderr)写入终端窗口。

Linux和类Unix操作系统的一个重要特性是能够将一个命令的stdout输出通过管道传输到第二个命令的stdin输入。第一个命令不关心它的输出是否没有发送到终端窗口,第二个命令不关心它的输入是否来自键盘。

尽管所有的Linux命令都有三个标准流,但并不是所有的命令都接受另一个命令的stdout作为其stdin的输入。这意味着你不能通过管道输入到它们。

xargs是使用标准数据流构建执行管道的命令。通过使用xargs,我们可以使echo、rm和mkdir等命令接受标准输入作为参数。

xargs命令

xargs将接受管道输入。它还可以接受来自文件的输入。xargs将该输入用作命令的参数,我们已经告诉它要处理这些命令。如果我们不告诉xargs使用特定的命令,它将默认使用echo。

我们可以用它来演示xargs如何总是生成一行输出,即使是从多行输入。

如果将-1(每行列出一个文件)选项与ls一起使用,则会得到一列文件名。

ls -1 ./*.sh

如何在linux上使用xargs命令

这将列出当前目录中的shell脚本文件。

如何在linux上使用xargs命令

我们得到了一个预期的列。如果我们把它通过沙尔格管,我们能得到什么?

ls -1 ./*.sh | xargs

如何在linux上使用xargs命令

输出作为一个长文本流写入终端窗口。

如何在linux上使用xargs命令

正是这个功能让xargs将参数输入到其他命令中。

将xargs与wc一起使用

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

ls *.page | xargs wc

如何在linux上使用xargs命令

事情就是这样:

  • ls列出*.page文件并将列表传递给xargs。
  • xargs将文件名传递给wc。
  • wc将文件名视为命令行参数。

如何在linux上使用xargs命令

每个文件的统计信息与总体总数一起显示。

使用带确认的xargs

我们可以使用-p(交互式)选项让xargs提示我们确认我们很高兴它继续进行。

如果我们通过xargs传递一个文件名字符串给touch,touch将为我们创建文件。

echo 'one two three' | xargs -p touch

如何在linux上使用xargs命令

将显示要执行的命令,xargs通过键入“y”或“y”、或“n”或“n”并按Enter键等待我们做出响应。

如果您只需按Enter键,它将被视为“n”。仅当键入“y”或“y”时才执行该命令。

如何在linux上使用xargs命令

我们按“y”键,然后按回车键。我们可以使用ls检查文件是否已创建。

ls one two three

如何在linux上使用xargs命令

将xargs与多个命令一起使用

通过使用-I(初始参数)选项,我们可以对xargs使用多个命令。

此选项定义一个“替换字符串”。只要替换字符串的标记出现在命令行中,就会**提供给xargs的值。

让我们使用tree命令查看当前目录中的子目录。-d(directory)选项使树忽略文件,只报告目录。

tree -d

如何在linux上使用xargs命令

只有一个子目录叫做“images”

在一个名为“的文件中”目录.txt,我们有一些希望创建的目录的名称。我们可以用cat查看它的内容。

cat directories.txt

如何在linux上使用xargs命令

我们将使用它作为xargs的输入数据。我们的命令是:

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

这种情况如下:

  • 猫目录.txt|:这将推送目录.txt将文件(所有新目录名)放入xargs。
  • xargs-I%:这定义了一个“replace string”和标记“%”。
  • sh-c:这将启动一个新的子shell。c(命令)告诉shell从命令行读取命令。
  • 'echo%;mkdir%':每个“%”标记将被xargs传递的目录名替换。echo命令将打印目录名;mkdir命令将创建目录。

如何在linux上使用xargs命令

目录被逐一列出。

如何在linux上使用xargs命令

我们可以再次使用tree来验证目录是否已创建。

tree -d

如何在linux上使用xargs命令

将文件复制到多个位置

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

我们将把两个目录的名称作为输入参数导入xargs。我们将告诉xargs一次只将这些参数中的一个传递给它正在使用的命令。

在本例中,命令是cp。因此效果是调用cp两次,每次调用两个目录中的一个作为命令行参数。允许这种情况发生的xargs参数是-n(max number)选项。我们要把这个设定成一个。

我们还在cp中使用-v(verbose)选项,以便它报告正在发生的事情。

echo ~/Backups/ ~/Documents/page-files/ | xargs -n 1 cp -v ./*.page

如何在linux上使用xargs命令

文件被复制到两个目录,一次一个目录。cp报告每个文件复制操作,以便我们可以看到它们的发生。

如何在linux上使用xargs命令

删除嵌套目录中的文件

如果文件名中有空格和奇怪的字符(如换行符),xargs将无**确解释它们。我们可以通过使用-0(空终止符)选项来克服这个问题。这告诉xargs使用空字符作为文件名的最终分隔符。

我们将在这个例子中使用find。find有自己的选项来处理文件名中的空白和奇怪字符。它是-print0(全名,空字符)选项。

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

这种情况如下:

  • 找到。-name“*.png”:find将从当前目录“.”中搜索名称与“*.png”匹配的对象,即文件(type-f)。
  • -print0:名称将以空字符结尾,空格和奇怪字符将被满足。
  • xargs-0:xargs还将考虑文件名以null结尾,空格和奇怪的字符不会引起问题。
  • rm-v-rf“{}”:rm将变得冗长,并报告正在发生的事情(-v)。它将是递归的(-r)并查看嵌套的子目录,并且将在不提示(-f)的情况下删除文件。“{}”被每个文件名替换。

如何在linux上使用xargs命令

将搜索所有子目录,并删除与搜索模式匹配的文件。

如何在linux上使用xargs命令

删除嵌套目录

假设我们要删除一组嵌套的子目录。树会让我们看到它们的。

tree -d

如何在linux上使用xargs命令

find . -name "level_one" -type d printo | xargs -o rm -v -rf "{}"

此命令将使用find在当前目录中递归搜索。搜索目标是一个名为“level\ u one”的目录。目录名通过xargs传递给rm。

如何在linux上使用xargs命令

此命令与上一个命令之间唯一重要的更改是,搜索项是最顶层目录的名称,-type d告诉find查找目录,而不是文件。

如何在linux上使用xargs命令

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

tree -d

如何在linux上使用xargs命令

所有嵌套的子目录都将被删除。

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

我们可以使用find、xargs和rm删除除要保留的类型之外的所有文件。这有点违反直觉,但我们提供了希望保留的文件类型的名称,而不是要删除的文件类型的名称。

not选项告诉find返回与搜索模式不匹配的文件名。我们再次对xargs使用-I(初始参数)选项。这次我们定义的替换字符串标记是“{}”。这与我们之前生成的replace string令牌的行为完全相同,它恰好是一个“%”。

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

如何在linux上使用xargs命令

我们可以和ls核实一下。目录中只剩下与“*.sh”搜索模式匹配的文件。

ls -l

如何在linux上使用xargs命令

使用xargs创建存档文件

我们可以使用find来搜索文件,并将它们通过xargs传递给tar,从而创建一个归档文件。

我们要在当前目录中搜索。搜索模式是“*.page”,所以我们要查找“.page”文件。

find ./ - name "*.page" -type f -print0 | xargs -0 -tar -cvzf page_files.tar.gz

如何在linux上使用xargs命令

在创建存档文件时,将按预期列出这些文件。

如何在linux上使用xargs命令

数据中介

有时你需要一个小脚手架当你把东西堆在一起。xargs架起了可以输出信息的命令和不能接收信息的命令之间的桥梁。

xargs和find都有大量的选项。我们鼓励您查看他们的手册页以了解更多信息。

  • 发表于 2021-04-03 07:25
  • 阅读 ( 166 )
  • 分类:互联网

你可能感兴趣的文章

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 307 )

如何在android和termux上使用linux命令行

...许您在Android设备上安装诚实善良的Linux应用程序。下面是如何使用Termux应用程序。 ...

  • 发布于 2021-03-18 07:26
  • 阅读 ( 373 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 286 )

linux下如何重命名文件

要在Linux中重命名文件吗?如果您知道如何在Windows、macOS或Chrome操作系统中完成这项工作,那么您就知道如何在这里完成这项工作。在大多数版本的Linux上,您只需右键单击一个文件并选择Rename选项。 ...

  • 发布于 2021-03-22 02:48
  • 阅读 ( 275 )

如何在linux上使用groupadd管理用户组

... 相关:如何在Linux中更改密码 ...

  • 发布于 2021-03-26 17:15
  • 阅读 ( 185 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 334 )

在linux中,“bash”是什么意思?

...在这篇短文中,我们将探讨Bash是什么,它做什么,以及如何开始使用它。 ...

  • 发布于 2021-03-28 13:14
  • 阅读 ( 451 )

为什么linux的systemd在这么多年后仍然存在分歧

...在和以前一样具有分裂性。尽管许多主要的Linux发行版都使用它,但铁杆反对者并没有松懈。 linux引导序列 打开计算机电源后,硬件将引导,然后(根据计算机使用的引导扇区类型)执行主引导记录(MBR)或运行统一可扩展固...

  • 发布于 2021-04-02 02:56
  • 阅读 ( 178 )

如何使用curl从linux命令行下载文件

...个文件。每一个都有它在远程服务器上的名字。 相关:如何在Linux上使用xargs命令 从ftp服务器下载文件 将curl与文件传输协议(FTP)服务器结合使用很容易,即使您必须使用用户名和密码进行身份验证。要使用curl传递用户名和...

  • 发布于 2021-04-02 22:46
  • 阅读 ( 197 )

如何在linux上使用管道

使用Linux管道编排命令行实用程序如何协作。通过利用一组独立命令并将它们转化为一个专注的团队,简化复杂的流程并提高生产率。我们教你怎么做。 到处都是管道 管道是Linux和类Unix操作系统最有用的命令行特性之一。管道...

  • 发布于 2021-04-03 04:49
  • 阅读 ( 198 )
qvkw0305412
qvkw0305412

0 篇文章

相关推荐