04.08 管道xargs和exec的区别

管道|传递的是字符串、文本、文字、文字符号。

1. 【find+grep】测试

[root@Never-downtime oldboy]# find /oldboy/ -type f -name "*txt" | egrep oldboy
/oldboy/stu3.txt
/oldboy/stu7.txt
/oldboy/stu6.txt
/oldboy/stu2.txt
/oldboy/stu4.txt
/oldboy/stu1.txt
/oldboy/stu8.txt
/oldboy/stu10.txt
/oldboy/stu9.txt
/oldboy/stu5.txt

2. 【head+tail】测试

[root@Never-downtime oldboy]# head -10 stu1.txt |tail -5
5
6
7
8
9

3. 【find+rm】测试

[root@Never-downtime oldboy]# find /oldboy/ -type f -name "*.txt" |rm
command not found
[root@Never-downtime oldboy]# find /oldboy/ -type f -name "*.txt" |xargs rm

4. 【find+sed】测试

[root@Never-downtime oldboy]# find /oldboy/ -type f -name "*.txt" |xargs -i sed  's#oldboy#oldgirl#g'

这里写图片描述

5. 【find+tar】测试

[root@Never-downtime oldboy]# find /oldboy/ -type f  -name "*.txt" | xargs tar cf  /data/stu.tar.gz 
tar: Removing leading `/' from member names
-rw-r--r-- 1 root root 20480 Apr  8 12:31 /data/stu.tar.gz
[root@Never-downtime oldboy]# tar tf /data/stu.tar.gz
oldboy/stu3.txt
oldboy/stu7.txt
oldboy/stu6.txt
oldboy/stu2.txt
oldboy/stu4.txt
oldboy/stu1.txt
oldboy/stu8.txt
oldboy/stu10.txt
oldboy/stu9.txt
oldboy/stu5.txt

[root@Never-downtime oldboy]# find /oldboy/ -type f  -name "*.txt" -exec  tar cf  /data/stu.tar.gz {} \;
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from member names
tar: Removing leading `/' from^C
[root@Never-downtime oldboy]# 
[root@Never-downtime oldboy]# 
[root@Never-downtime oldboy]# tar tf /data/stu.tar.gz 
oldboy/stu5.txt

[root@Never-downtime oldboy]# tar cf /data/stu.tar.gz $(find /oldboy/ -type f  -name "*.txt" )
tar: Removing leading `/' from member names
[root@Never-downtime oldboy]# tar tf /data/stu.tar.gz 
oldboy/stu3.txt
oldboy/stu7.txt
oldboy/stu6.txt
oldboy/stu2.txt
oldboy/stu4.txt
oldboy/stu1.txt
oldboy/stu8.txt
oldboy/stu10.txt
oldboy/stu9.txt
oldboy/stu5.txt

[root@Never-downtime oldboy]# tar cf /data/stu.tar.gz `find /oldboy/ -type f  -name "*.txt" `
tar: Removing leading `/' from member names
[root@Never-downtime oldboy]# tar tf /data/stu.tar.gz 
oldboy/stu3.txt
oldboy/stu7.txt
oldboy/stu6.txt
oldboy/stu2.txt
oldboy/stu4.txt
oldboy/stu1.txt
oldboy/stu8.txt
oldboy/stu10.txt
oldboy/stu9.txt
oldboy/stu5.txt

注意:-exec的执行过程是找到一个执行一个,每找一个就替换掉一个,故只要一个结果。
|管道传递的是字符串,是文本,文字。
|xargs传递的是文件名,如果sed -i修改的时候不加文件名的话会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值