linux基础-find查找
1.认识
实时查找工具,通过便利指定路径完成文件的查找工作特点:(1)精确查找(2)实时查找(3)查找速度慢(4)可能之搜索用户具备读取和执行权限的目录语法 :
find [OPTION]... [查找路径] [查找条件] [处理动作]
[路径...]: 指定在哪个或哪些目录下开始查找。可以是单个目录(如 /home),多个目录(如 /home /var),或者当前目录(用 . 表示)。
[表达式...]: 这才是命令的核心,它定义了:
“找什么?” (搜索条件,如按文件名、类型、时间等)
“找到后干嘛?” (执行操作,如打印、删除等)
2.使用
1.按名称进行查找
find <路径> -name "文件名模式"# 1. 在当前目录及其子目录中,查找名为 "report.txt" 的文件
find . -name "report.txt"
# 2. 在 /home 目录下,查找所有以 ".jpg" 结尾的文件
find /home -name "*.jpg"
# 3. 在 /var/log 目录下,查找名字中包含 "syslog" 的文件(不区分大小写)
find /var/log -iname "*syslog*"
# 4. 查找文件名正好是 "a" 开头的文件
find . -name "a*"#扩展:
find / -inamge INdkfj #忽略匹配文件名称的大小写#基于文件的inode号进行查找文件
find / -inum 77777#基于硬链接来进行查找
-samefile 找的是真正的同一个文件,而不仅仅是 inode 编号相同的文件
[root@luozhengkang ~]# ll -i /etc/sysconfig/network-scripts/ifcfg-eth0
788756 -rw-r--r--. 2 root root 162 Sep 5 02:37 /etc/sysconfig/network-scripts/ifcfg-eth0
[root@luozhengkang ~]# ll -i
788756 -rw-r--r--. 2 root root 162 Sep 5 02:37 ifcf-eth0
[root@luozhengkang ~]# find /etc/ -samefile /root/ifcf-eth0
#在"/etc"目录下找和"/root/ifcf-eth0"文件相同的文件,即是硬连接关系而非inode节点编号一样,inode节点编号一样可能是不同分区的文件哟,而硬连接是不可以跨越分区的。
/etc/sysconfig/network-scripts/ifcfg-eth0
-samefile 找的是真正的同一个文件,而不仅仅是 inode 编号相同的文件。
2.按照文件类型进行查找
-type TYPEf: 普通文件d: 目录文件l: 符号链接文件s:套接字文件 b: 块设备文件c: 字符设备文件 p: 管道文件find . -type d -a -name "luoznengkang"find . -type f -o -name "luozhengkang"find . ! -name "*.txt" #查找当前目录下不是以.txt结尾的文件
3.按文件按大小进行查找
find [路径] -size [大小参数]+n 大于 n -size +1M (大于1MB)-n 小于 n -size -100k (小于100KB)n 等于 n -size 1024c (等于1024字节)
单位c 字节 (bytes) -size 1024ck KiB (1024 bytes) -size 1kM MiB (1024 KiB) -size 10MG GiB (1024 MiB) -size 2G用法:查找文件
# 查找当前目录下大于 100MB 的文件
find . -size +100M# 查找整个系统中大于 1GB 的文件(需要权限)
find / -size +1G 2>/dev/null# 查找 /var 目录下大于 500MB 的文件
find /var -size +500M============================
#范围查找
# 查找大小在 1MB 到 10MB 之间的文件
find . -size +1M -a -size -10M
# 查找大小在 100KB 到 1MB 之间的文件
find . -size +100k -a -size -1M
# 使用括号明确范围(可选)
find . \( -size +1M -a -size -10M \)
4.按时间进行查找
find 支持三种时间类型:时间类型 选项前缀 含义
修改时间 -m 文件内容最后一次被修改的时间
访问时间 -a 文件最后一次被读取的时间
状态改变时间 -c 文件元数据(权限、所有者等)改变的时间基本语法:
# 修改时间 (mtime)
find [路径] -mtime n# 访问时间 (atime)
# 状态改变时间 (ctime)
find [路径] -atime n
find [路径] -ctime n---------------------------------------------
#查找最近修改的文件
# 查找24小时内修改过的文件
find . -mtime -1# 查找今天修改的文件(0表示当前时间开始的24小时内)
find . -mtime 0# 查找最近7天内修改的文件
find . -mtime -7---------------------------------------------
#查找旧文件
# 查找超过30天未修改的文件
find . -mtime +30# 查找超过90天未访问的文件
find . -atime +90# 查找超过1年未修改的文件
find . -mtime +365-------------------------------------------
5.按照属主属组进行查找
-user USERNAME:查找属主为指定用户(UID)的文件 -group GRPNAME: 查找属组为指定组(GID)的文件 -uid UserID:查找属主为指定的UID号的文件-gid GroupID:查找属组为指定的GID号的文件 -nouser:查找没有属主的文件 -nogroup:查找没有属组的文件find [路径] -user [用户名]
find [路径] -user [UID]
6.找到文件做什么
1.-exec 基本语法:find .... -exec <命令> {} \; {} 就像相当于把查到的东西扔到了{} 然后在执行命令# 1. 找到所有 ".tmp" 文件并删除它们 (非常危险,请谨慎使用!)
find . -name "*.tmp" -exec rm -f {} \;
# 2. 找到所有 ".jpg" 文件,并将它们复制到 /backup/photos 目录
find . -name "*.jpg" -exec cp {} /backup/photos/ \;
# 3. 找到所有 ".conf" 文件,并用 ls -l 显示其详细信息
find /etc -name "*.conf" -exec ls -l {} \;============================================
2.管道xargs
find [条件] | xargs 命令常用参数
-0 # 处理 null 分隔的输入(配合 find -print0)
-n 数字 # 每次命令最多使用多少个参数
-t # 显示要执行的命令
-p # 交互式,执行前确认
-I {} # 替换字符串,类似 -exec 中的 {}# 1. 基本用法
find . -name "*.txt" | xargs ls -l
# 2. 处理包含空格的文件名(重要!)
find . -name "*.txt" -print0 | xargs -0 ls -l
# 3. 删除文件
find /tmp -name "*.tmp" -mtime +7 | xargs rm -f
# 4. 限制每次处理的参数数量
find . -name "*.jpg" | xargs -n 10 cp -t /backup/
# 5. 显示执行的命令
find . -name "*.txt" | xargs -t rm -f=======================================
3.反引号
rm -rf `find -type f -a -name "luozhengkang*"`