Linux 命令 xargs

参数与标准输入

参数和标准输入其实是有区别的。在 Linux 命令中,有些命令可以接收标准输入,有些是 不能的。像 ls,就是只能接收参数,不能接收标准输入。像 cat 命令或 echo 命令,这些 是可以的。

怎么分辨一个命令可不可以接收标准输入?很简单,当你敲完命令回车后,终端会等待接收 你的输入,例如当你在终端输入 cat 后,终端会等待你输入字符,当你输入一些字符后, 然后按 Ctrl-C 发送终止符号。这时 cat 命令接收标准输入完毕,执行命令,也就是将刚 才键入的内容输出的标准输出上(屏幕)。

管道

管道的作用是将前面命令的标准输出作为后面命令的标准输入。这里要注意,后面的命令接 收的是标准输入,所以如果命令不支持接收标准输入,那么就不能直接使用管道,例如常用 的 ls 命令,只能使用参数,而不能使用标准输入,所以[command] | ls 是不能使用的。 而命令如 echo 或 cat 就可以。那么肯定有方法来实现这些不能使用标准输入的命令与管 道结合,这时候 xargs 就有用了。

xargs

xargs 命令是给其他命令传递参数的一个 过滤器 ,也是组合多个命令的一个 工具

它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成 特定命令的命令参数。命令[command 1] | xargs [command 2]就是将command 1的标准 输出结果,通过管道|变成xargs的标准输入,然后xargs再将此标准输入变成参数,传 给[command 2]。这样一来,通过 xargs 命令,我们便可以在管道后面使用那些不接收标 准输入的命令了。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行, 单行变多行。xargs 的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。 xargs 是构建单行命令的重要组件之一。

参数

  • -a file 从文件中读入作为 sdtin
  • -e flag,注意有的时候可能会是-E,flag 必须是一个以空格分隔的标志,当 xargs 分 析到含有 flag 这个标志的时候就停止。
  • -p 当每次执行一个 argument 的时候询问一次用户。
  • -n num 后面加次数,表示命令在执行的时候一次用的 argument 的个数,默认是用所有 的。
  • -t 表示先打印命令,然后再执行。
  • -i 或者是-I,这得看 linux 支持了,将 xargs 的每项名称,一般是一行一行赋值给 {}, 可以用 {} 代替。
  • -r no-run-if-empty 当 xargs 的输入为空的时候则停止 xargs,不用再去执行了。
  • -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
  • -L num 从标准输入一次读取 num 行送给 command 命令。
  • -l 同 -L。
  • -d delim 分隔符,默认的 xargs 分隔符是回车,argument 的分隔符是空格,这里修改 的是 xargs 的分隔符。
  • -x exit 的意思,主要是配合-s 使用。。
  • -P 修改最大的进程数,默认是 1,为 0 时候为 as many as it can,这个例子我没有想 到,应该平时都用不到的吧。

peco/percol/fzf

交互式模糊选择工具,方便连接多个命令

结合管道、命令替换、以及 xargs 可以方便地组合多个命令,完成相应的功能

原文:大专栏  Linux 命令 xargs


上一篇:linux下载网页上的文件夹以及删除文件


下一篇:grep