linux之find
find
-
按照文件名称查找 -name ""
-
查找文件、目录 -type f / -type d
-
按照文件、目录大小 -size
-
按照文件、目录时间 -atime -ctime
-
文件类型 -type f d l c(dev/null dev/zero) b(磁盘、光盘)
1.查找大文件
[root@m01 var]# find / -type f -size +1G 2>/dev/null
/proc/kcore
/opt/bigfile/1.txt
2.查找大目录下的小文件
find /opt/ -type d -size +1M
3.查找其它类型文件
find /opt/ -type l b c
4.在指定目录下,查找文件或查找目录 -o
[root@m01 opt]# find /opt/ -type d -o -type f
/opt/
/opt/doc
/opt/bigfile
/opt/rm.sh
# 忽略文件大小写
[root@m01 opt]# find /opt/ -iname "*.sh" -o -iname "*.txt"
/opt/file.SH
/opt/f1.txt
/opt/f2.txt
/opt/f3.txt
/opt/f4.txt
/opt/f5.txt
/opt/f6.txt
/opt/f7.txt
/opt/f8.txt
/opt/f9.txt
/opt/f10.txt
/opt/rm.sh
5.使用并且和或者查找文件 -a
[root@m01 opt]# find /opt/ -name "*.sh" -a -type f
/opt/rm.sh
6.不区分大小写使用 -iname
[root@m01 opt]# find /opt/ -iname "*.sh"
/opt/file.SH
/opt/rm.sh
7.按照深度等级查找
[root@m01 opt]# find /opt/ -maxdepth 1 -name "*.txt"
/opt/f1.txt
/opt/f2.txt
8.查找出等于10M或者大于10M的文件
[root@m01 opt]# find / -type f -size 10M -o -size +10M 2>/dev/null
/boot/initramfs-0-rescue-e61ca9948a744df2a76bb612a2952399.img
/boot/initramfs-3.10.0-1160.el7.x86_64.img
/proc/kcore
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
9.查找出文件大于5M 并且小于15M
[root@m01 opt]# find / -type f -size +5M -a -size -15M 2>/dev/null
/boot/vmlinuz-3.10.0-1160.el7.x86_64
/boot/vmlinuz-0-rescue-e61ca9948a744df2a76bb612a2952399
/run/log/journal/e61ca9948a744df2a76bb612a2952399/system.journal
/sys/devices/pci0000:00/0000:00:0f.0/resource2
10.查找出大于1M的目录 如果目录大于1M 说明下面已经存在5万+的小文件
[root@m01 opt]# find / -type d -size +1M
/opt
[root@m01 opt]# ll -dh /opt/
drwxr-xr-x. 4 root root 1.2M Nov 18 10:52 /opt/
[root@m01 opt]# du -sh /opt/
1.9M /opt/
11.find 按照时间查找
语法格式:
三种时间:
atime: 访问时间
mtime: 文件修改时间
ctime: 文件属性修改时间
find ./ -mtime +7 # 7天前修改过的文件
find ./ -mtime -7 # 7天内修改过的文件
find ./ -mtime 0 # 24小时内被修改过的文件
# 查找24小时内 修改过的文件
find / -type f -mtime 0
时间查找的作用:
1.大于7天或者30天前的文件不用了需要备份或者删除
2.系统中毒 文件被篡改。
笔试题: 查找/data目录下所有的普通文件修改时间大于30天前的然后删除
find /data -type f -mtime +30
12.将find的结果交给其他命令
三种执行方式:
第一种: find找到的文件交给 cat rm cp mv tar命令
# 在当前目录下,查找*.txt 文件内容
[root@m01 opt]# find ./ -type f -name "*.txt" -exec cat {} \;
hello sameen
[root@m01 opt]# cat `find ./ -type f -name "*.txt"`
hello sameen
[root@m01 opt]# find ./ -type f -name "*.txt" |xargs cat
hello sameen
tip :xargs后面所有的别名失效
# 查找名称3.txt的文件然后删除
[root@m01 opt]# find ./ -type f -name "3.txt" |xargs rm -f
[root@m01 opt]# find ./ -type f -name "3.txt" -exec rm -f {} \;
[root@m01 opt]# rm -f `find ./ -type f -name "3.txt"`
# 查找id.txt 复制到/opt
[root@m01 ~]# find ./ -type f -name "id.txt" -exec cp {} /opt/ \;
[root@m01 ~]# find ./ -type f -name "id.txt" |xargs -i cp {} /opt/
[root@m01 ~]# cp `find ./ -type f -name "id.txt"` /opt/
# 查找当前目录下所有txt文件并打包
[root@m01 ~]# find ./ -type f -name "*.txt" -exec tar zcvf txt.tar.gz {} \;
./1.txt
./2.txt
./id.txt
./w.txt
[root@m01 ~]# find ./ -type f -name "*.txt" |xargs -i tar zcvf txt.tar.gz {}
./1.txt
./2.txt
./id.txt
./w.txt
# 查找txt mv到/opt下
[root@m01 ~]# find ./ -type f -name "*.txt" |xargs -i mv {} /opt
[root@m01 ~]# find ./ -type f -name "*.txt" -exec mv {} /opt \;
Never try,never know