30天内的文件打包
find ./test_log -type f -mtime -30|xargs tar -cvf test_log.tar.gz
find,文件+超过7天+超过1M的+按日期为文件名压缩
注意: exec没-i, xargs如果有引用需要加上-i
find xargs
-type
-name
-size
-mtime
find /tmp/ -type f -mtime +7 -size +1M|xargs -i tar -zcvf access.log.tar.gz {}
find /tmp/ -type f -mtime +7 -size +1M -exec tar -zcvf access.log.tar.gz {} ;
- 文件+超过7天+超过1M的+按日期为文件名压缩
find /tmp/ -type f -mtime +7 -size +1M -exec tar -zcvf access_$(date +%F -d -1day).log.tar.gz {} ;
find+sed批量查找替换
find . -type f -name '*.md'|xargs sed -i 's#maotai#maomao#g'
find删除
find . -type f -name '*.md'|xargs -i rm -f {}
find . -type f -name '*.md' -exec rm -f {} ;
1,-exec
2,-exec没-i
3,-exec后面有 ;
sed和awk的2个绝招
- sed后向引用
- awk多分割过滤
过滤ip
- sed实现(后向引用)
ifconfig eth0|sed -n '2p'|sed -n 's#^.*inet ##gp'|sed -n 's# ne.*$##gp'
ifconfig eth0|sed -nr '2s#^.*net (.*) net.*$#1#gp'
- awk实现(多分割)
[root@n1 test]# ifconfig eth0|awk -F '[ ]+' 'NR ==2 {print $3}'
192.168.14.11
过滤文件权限
[root@n1 test]# ll test.md |awk '{print $1}'|tr 'rwx-' '4210'|awk -F '' '{print $2+$3+$4""$5+$6+$7""$8+$9+$10}'
644
- sed实现(后向引用)
[root@n1 test]# stat test.md |sed -nr 's#^.*(0(.*)/-.*$#1#gp'
644
- awk实现(多分割)
[root@n1 test]# stat test.md|awk -F '[(/]' 'NR==4 {print $2}'
0644
过滤/etc/passwd的20-30行
- 使用强悍的sed
- 使用awk的条件
sed过滤行
sed -n '10p' /etc/passwd
sed -n '10,20p' /etc/passwd
awk条件过滤行
- 方式1: 通过NR来控制
cat /etc/passwd|awk 'NR>10 && NR <20'
cat /etc/passwd|awk -F ':' 'NR>10 && NR<20 {print $1}'
注:NR在{}外
- 方式2:通过if语句
cat /etc/passwd|awk -F ':' '{if($3>3) print $3}'
注: 这种if在{}里
awk求和
[root@localhost ~]# awk -F ':' '{(s+=$3)}; END {print s}' /etc/passwd
2891
产生随机数
- head截取(不换行)
[root@n1 ~]# echo $RANDOM|md5sum|head -c 10
7f30eab068[root@n1 ~]#
- cut截取
[root@n1 ~]# echo $RANDOM|md5sum|cut -c 1-10
efc85e6acd