文件查找find,locate

非实时查找(数据库查找):locate

locate特点:

  • 查找速度快
  • 模糊查找
  • 非实时查找
  • 搜索的是文件的全路径,不仅仅是文件名

locate用法

-i 不区分大小写的搜索

-n N 只列举前N个匹配项目

-r 使用基本正则表达式
搜索名称或路径中包含"conf"的文件

locate conf

#使用Regex来搜索以".conf"结尾的文件

locate -r '\.conf$'

复制代码
[root@centos8 ~]#touch test2.log
[root@centos8 ~]#locate test2.log
[root@centos8 ~]#updatedb             #更新数据库
[root@centos8 ~]#locate test2.log
/root/test2.log

实时查找:find

find特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富
  • 可能只搜索用户具备读取和执行权限的目录

指定搜索目录层级

复制代码
-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
-mindepth level 最小搜索目录深度

跟据文件和inode查找

-name "文件名称" #支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来

-iname "文件名称" #不区分字母大小写

-inum n #按inode号查找

-samefile name #相同inode号的文件

-links n #链接数为n的文件

-regex "PATTERN" #以PATTERN匹配整个文件路径,而非文件名称

根据所属主,组查找

-user USERNAME #查找属主为指定用户(UID)的文件

-group GRPNAME #查找属组为指定组(GID)的文件

-uid UserID #查找属主为指定的UID号的文件

-gid GroupID #查找属组为指定的GID号的文件

-nouser #查找没有属主的文件

-nogroup #查找没有属组的文件

根据文件类型查找

-type 命令告诉 find 在找到的每个文件上执行后面的 xx 命令。

TYPE可以是以下形式:

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

#查看/home的目录

find /home --type d -ls

与或非

与:-a ,默认多个条件是与关系,所以可以省略-a

或:-o

非:-not !

复制代码
#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
find /etc -path '/etc/security' -a -prune -o -name "*.conf"

根据文件大小来查找

-size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感

#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]

-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]

+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)

复制代码
find / -size +10G
[root@centos8 ~]#find / -size +10G
/proc/kcore
find: '/proc/25229/task/25229/fd

find /etc -type f -size +1M -ls   #普通文件,且大于1M

跟权限查找

find -perm 755 会匹配权限模式恰好是755的文件

只要当任意人有写权限时,find -perm /222就会匹配

只有当每个人都有写权限时,find -perm -222才会匹配

只有当其它人(other)有写权限时,find -perm -002才会 匹配

处理动作

-print:默认的处理动作,显示至屏幕

-ls:类似于对查找到的文件执行"ls -dils"命令格式输出

-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file

-delete:删除查找到的文件,慎用!

-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会

交互式要求用户确认

-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令

{}: 用于引用查找到的文件名称自身

复制代码
#把etc里面后缀是.conf的后面加上.orig
find /etc/ -name "*.conf" -exec cp {} {}.orig \;
-name "*.conf" 用于找到以".conf"结尾的文件。
-exec cp {} {}.orig \; 用于将找到的文件复制到相同目录并加上".orig"后缀。

#提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} \;

#在主目录中寻找可被其它用户写入的文件
find ~ -perm -002 -exec chmod o-w {} \;

#查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data --type f -perm 644 -name "*.sh" --exec chmod 755 {} \;

根据时间戳

#以"天"为单位

-atime [+|-]#

#表示[#,#+1)

+# #表示[#+1,∞]

#根据权限查找

-# #表示[0,#)

-mtime #选项用于搜索文件的修改时间文件目录,单位以24小时计算;

-ctime #用于搜索文件的改变时间文件或目录,单位以24小时计算

文件元数据(如权限、所有者、链接等)被修改的时间

#以"分钟"为单位

-amin #查找在指定时间曾被存取过的文件或目录,单位以分钟计算

-mmin #查找在指定时间曾被更改过的文件或目录,单位以分钟计算

-cmin #查找在指定时间之时被更改过的文件或目录;

复制代码
find /var ! \( -user root -o -user postfix \) -mtime -7 -ls  不是 7天访问

xargs 给其他命令传递参数的一个过滤器

复制代码
cat test.txt | xargs  多行输入单行输出:
cat test.txt | xargs -n3  -n 选项 多行输出:
a b c
d e f
g h i
j k l
echo "nameXnameXnameXname" | xargs -dX  -d 选项 可以自定义一个定界符:
  name name name name
#用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
 
#统计一个源代码目录中所有 php 文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
 
#查找所有的 jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
 
 
#结合 -t 选项可以打印出 xargs 执行的命令
ls | xargs -t -I{} echo {}
 
#-p 选项会在执行每一个命令时弹出确认,当你需要非常准确的确认每一次操作时可以使用 -p 参数,比##如,查找当前目录下 .log 文件,每一次删除都需要确认:
find . -maxdepth 1 -name "*.log" | xargs -p -I{} rm {}

多行输入单行输出:

相关推荐
子琦啊5 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
跨境数据猎手6 小时前
跨境独立站系统技术拆解(附带源码)
服务器·前端·php
AOwhisky6 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..7 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行7 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.7 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
星恒讯工业路由器7 小时前
星恒讯工业生产自动化解决方案
运维·物联网·自动化·智能路由器·信息与通信
a8a3027 小时前
Laravel9.x新特性全解析
运维·spring boot·nginx
beyond阿亮7 小时前
IEC104 Client Simulator - IEC104 主站/客户端模拟器 仿真器免费使用教程
运维·服务器·网络