您当前的位置: 首页 >  ar

liaowenxiong

暂无认证

  • 2浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux 命令之 xargs -- 给其他命令传递参数的一个过滤器

liaowenxiong 发布时间:2021-07-18 14:16:52 ,浏览量:2

文章目录
  • 一、命令介绍
  • 二、选项参数
  • 三、命令示例
    • (一)批量重命名目录中的文件
    • (二)给多个命令传递参数

一、命令介绍

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。

xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。

二、选项参数

以后再整理…

三、命令示例 (一)批量重命名目录中的文件
[root@htlwk0001host test]#  ls | xargs -t -i mv {} {}.bak

注:xargs 读取管道 | 中的数据;-i 选项告诉 xargs 用每项的名称替换 {}-t 选项指示 xargs 先打印命令,然后再执行。

(二)给多个命令传递参数

如果 xargs 要将命令行参数传给多个命令,可以使用 -I 参数。-I 指定接收命令行参数的变量名。

[root@htlwk0001host test]# cat foo.txt
one
two
three
[root@htlwk0001host test]# cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one 
two
three
[root@htlwk0001host test]# ls 
one two three

上面代码中,文件 foo.txt 内有三行的文本,我们希望对每一项命令行参数,执行两个命令(echomkdir),使用 -I file 表示 file 是命令行参数的替代字符串(就是使用 file 来指代命令行参数,所以 file 其实类似变量的作用)。执行命令时,具体的参数会替代掉 echo file; mkdir file 里面的两个 file

具体点就是,xargs 读取管道中的数据,就是三个词:onetwothree,转换成命令行参数,由变量 file 来接收,所以首先 file=one,于是echo file; mkdir file 就变成了 echo one;mkdir one,然后执行命令 sh,而命令 sh 则在选项 -c 的作用下,把后面的字符串视为 shell 命令脚本,于是就执行这个脚本语句,也就是执行命令 echo onemkdir one

关于命令 sh,详见《Linux 命令之 sh – Shell 命令语言解释器》

关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0434s