管道和xargs
打卡作业:
1)在当前目录,所有的普通文件中,搜索文件名含有istester这个词
find ./ -type f | grep istester (只会搜索出来文件名中包含istester,非文件内容)
find ./ -type f | xargs grep istester <==>find ./ -type f | xargs -i grep istester {}
(搜索出文件内容中含有istester的文件,输出文件和符合条件字符的行)
2)在当前目录,移动1天以内的所有内容到 ~/idoxu 目录
find ./ -atime -1 | xargs -i mv {} ~/idoxu
3)在当前目录,移动10天以前的所有内容到 ~/idoxu 目录
find . -atime +10 | xargs -i mv {} ~/idoxu
4)在/usr/isTester目录,移动文件大小为零的文件到~/idoxu目录下的 0size/ 文件夹
find /usr/istester -size 0 | xargs -i mv {} ~/idoxu/0size/
5)在/usr/isTester目录,移动大于200M的文件到 ~/idoxu目录下的 200size/ 文件夹
find /usr/istester -size 200M -type f | xargs -i mv {} ~/idoxu/200size/
思考总结:
1、" | "
作用:将左边命令的结果输出作为左边命令的输入
类似符号还有:
& 作用:将命令放到后台执行,如:redis-server &
&& 作用:左边命令执行成功后,执行右边的命令,如:echo "istester_a" >>idoxu/istester002.ini && echo "istester_b" >>idoxu/istester002.ini
|| 作用:当左边命令执行失败后,才执行右边命令
2、"xargs"
作用:1、常和管道命令|一起使用,解决有的命令不支持使用管道来传递参数
2、可将文本输入转换为其他格式输出
使用:
1、cat idoxu/new.ini | xargs 多行格式化为一行输出
2、cat idoxu/new.ini | xargs -n2 格式化为一行两个输出
3、cat idoxu/new.ini | xargs -n2 -ds 格式化按s分割,一行两个输出
4、find ./ -name "istester001*" | xargs -i mv {} /root/test_shen -i 默认使用{}将前一命令的返回值传入到后已命令
5、find ./ -name "istester001*" | xargs -I [] rm -rf [] -I可指定符号代替前一命令的返回值
6、find ./ -name "istester001*" | xargs -i -p mv {} /root/test_shen -p参数是执行时提示确认是否执行