xargs命令的使用

ls | xargs -n 9 rm -rf



基本介绍


xargs 的全称是 “eXtended ARGuments”,它是一个常用的命令行实用程序。xargs 命令用于从标准输入或文件中读取数据,并将其作为参数传递给其他命令。

xargs 命令的设计初衷是为了解决一些命令行长度限制的问题。它可以将一系列输入数据分割成适当大小的块,并将这些块作为参数传递给其他命令进行处理。

xargs 命令最早是由 Doug McIlroy 在1979年开发的,作为AT&T Unix V7操作系统的一部分。然而,它在后来的UNIX和类UNIX系统中得到了广泛的采用,并成为了标准工具之一。

由于 xargs 是UNIX命令行工具的一部分,因此它没有具体的个人作者。它是在UNIX开发社区中的多个人员的贡献和合作下逐步发展和改进的。

xargs作用


xargs 是一个命令行实用工具,用于从标准输入中读取数据,并将其作为参数传递给其他命令。它的主要作用是将输入数据分割成单个参数,并将这些参数传递给指定的命令进行处理。

以下是 xargs 的一些常见用途和功能:

  1. 参数传递:xargs 从标准输入读取数据,并将其作为参数传递给指定的命令。这对于需要处理大量参数的命令非常有用,因为命令行有长度限制。

  2. 分割输入:xargs 默认以空格为分隔符将输入数据分割成多个参数。可以使用 -d 选项指定自定义的分隔符。

  3. 批量处理:xargs 可以批量处理输入数据。例如,您可以将 xargs 与其他命令(如 rmcp)结合使用,以一次性删除或复制多个文件。

  4. 并行处理:使用 -P 选项,xargs 可以并行执行命令,从而提高处理速度。您可以指定并行处理的任务数。

  5. 交互式操作:通过使用 -I 选项,xargs 可以将输入数据插入到命令中的指定位置,从而进行交互式操作。

  6. 防止命令行过长:当命令行长度超过系统限制时,可以使用 xargs 将输入数据分批传递给命令,以避免超出限制。

总而言之,xargs 是一个非常有用的工具,可以将输入数据转换为命令行参数,并提供一些选项和功能来处理和操作这些参数,从而简化命令行操作和提高效率。


举例说明其作用


以下是一些示例,说明 xargs 的作用:

  1. 批量删除文件:

    1
    2
    3
    4
    5
    6
    7
    8
    9
       find . -name "*.txt" | xargs rm
    ```

    上述命令使用 `find` 查找当前目录下所有扩展名为 `.txt` 的文件,并将它们的路径作为参数传递给 `xargs`,然后 `xargs` 将这些路径传递给 `rm` 命令,从而批量删除这些文件。

    ````

    1. 并行压缩文件:

    find . -name “*.log” | xargs -P4 -I {} gzip {}

    1
    2
    3
    4
    5
    6
    7
    8
    9

    上述命令使用 `find` 查找当前目录下所有扩展名为 `.log` 的文件,并将它们的路径作为参数传递给 `xargs`。`-P4` 选项指定了并行执行的任务数为 4。`-I {}` 选项将文件路径插入到 `gzip` 命令中的 `{}` 位置,然后 `xargs` 并行执行 `gzip` 命令,压缩这些文件。

    ````

    1. 批量创建目录:

    `````
    cat directories.txt | xargs mkdir

    上述命令使用 cat 命令读取名为 directories.txt 的文件,该文件包含要创建的目录路径。然后,xargs 将这些路径作为参数传递给 mkdir 命令,以批量创建这些目录。

    1
    2
    3
    4
    5
    6
    7
    8
    9

    1. 从标准输入读取参数:

    `````
    echo "file1.txt file2.txt file3.txt" | xargs rm
    ```

    上述命令使用 `echo` 输出一行包含文件名的字符串,并将其通过管道传递给 `xargs`。`xargs` 将字符串中的文件名作为参数传递给 `rm` 命令,以删除这些文件。

这些示例展示了 xargs 在不同场景下的作用,它能够将输入数据转换为命令行参数,并进行相应的处理和操作。请注意,在实际使用中,您应根据具体需求和情况来调整命令和参数。


使用xargs ,将下面这两行命令合二为一

1
2
3
k -n xxx get pod -o wide |grep -v abcd |sed 1d |awk '{print $1}' > pod.list

for pod in cat pod.list; do kubectl -n xxx logs $pod > $pod.log; done

可以使用 xargs 命令将这两个命令合并为一个。下面是合并后的命令:

1
k -n xxx get pod -o wide | grep -v abcd | sed 1d | awk '{print $1}' | xargs -I {} kubectl -n taskon logs {} > {}.log

在这个命令中,xargs 用于将前面的命令的输出作为参数传递给后面的命令。-I {} 选项指定了一个占位符 {},它会被每个参数替换。kubectl -n taskon logs {} > {}.log 是要执行的命令,其中 {} 会被替换为每个从前面命令的输出中提取出的 pod 名称。

这样,每个 pod 的日志将会被保存到一个以 pod 名称命名的日志文件中,例如 pod1.logpod2.log 等等。