linux指令 xargs

xargs给其他指令传递参数的一个过滤器

  1. xargs 读取输入数据然后格式化输出

新建test.txt 里面包含多行文本,直接cat test.txt 

test1    
test2
test3

cat test.txt | xargs

test1 test2 test3
  1. xargs -n

加入-n 代表多行输, cat test.txt | xargs -n2

test1 test2
test3
  1. xargs -d 自定义定界符

cat test.txt | xargs -de

t st1    
t st2
t st3
  1. 读取stdin,将格式化后的参数传递给命令 -I 指定一个替换字符串{}

定义一个output.sh,输出传入的参数

cat output.txt
#输出结果
#!/bin/bash

echo $*

cat test.txt | xargs -I {} ./output.sh -1 {} -2

-1 test1 -2
-1 test2 -2
-1 test3 -2
  1. 结合find指令使用

用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 将 -0 作为定界符。

统计一个源代码目录中所有 php 文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的 jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
  1. 打印出执行的指令 -t

综合 -t 选项可以打印出xargs执行的指令, ls | xargs -t -I{} echo {}

echo output.sh 
output.sh
echo test.txt 
test.txt
  1. 使用-p确认执行的命令

-p 选项会在执行每一个命令时弹出确认,当你需要非常准确的确认每一次操作时可以使用 -p 参数,比如,查找当前目录下 .log 文件,每一次删除都需要确认:

find . -maxdepth 1 -name "*.log" | xargs -p -I{} rm {}
  1. 使用-I 可以让xargs执行多个指令

cat mkdir_folder.txt
test1
test2
test3

cat mkdir_folder.txt | xargs -I % sh -c 'echo %; mkdir %'
test1
test2
test3

ls
test1 test2 test3

创建了多个文件夹

暂时学到这里,学习记录的笔记,每天进步一点点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开开心心everyday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值