# xargs

xargs 可以将 stdin 中以空格或换行符进行分隔的数据,形成以空格分隔的参数(arguments),传递给其他命令。

由于是以空格作为分隔符,所以有一些文件名或者其他意义的字符串内含有空格的时候,xargs 可能会误判。

# 常用选项

-a, --arg-file=FILE
  # 从指定的文件 FILE 中读取输入内容
-d, --delimiter=DEL
  # 指定 xargs 处理输入内容时的分隔符,默认是按空格和换行符作为分隔符,输出 arguments 时按空格分隔
-E EOF_STR
  # 遇到 EOF_STR 时表示输入的结束
-I REPLACE_STR
  # 将 xargs 输出的每一项参数单独赋值给后面的命令,参数需要用指定的替代字符串 REPLACE_STR 代替
  # REPLACE_STR 可以使用 {} $ @ 等符号,其主要作用是当 xargs command 后有多个参数时,调整参数位置

# 案例

shell 的特殊字符反引号还原成一般字符:

$ echo '`0123`4 56789' | xargs -t echo
`0123`4 56789

从指定的文件中读取输入内容:

$ cat test.txt
a
b
c

$ xargs -a test.txt
a b c

以指定字符分隔输入的内容(分隔符必须是单个字符或转义序列):

$ echo a,b,c | xargs
a b c

设置 xargs 读入参数时的结束标识(结束标志必须要是单独的字段,即以空格或者换行符前后分隔的字段),以逗号结束:

$ echo 01234 , 56789 | xargs -E ","
01234

备份以 txt 为后缀的文件:

find . -name "*.txt" | xargs -I {}  cp {} /tmp/{}.bak