文件查找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 {}

多行输入单行输出:

相关推荐
一瓢一瓢的饮 alanchan36 分钟前
【运维监控】influxdb 2.0 + grafana 11 监控jmeter 5.6.3 性能指标(2)
运维·jmeter·grafana·监控·influxdb·运维监控
CodeHackerBhx2 小时前
如何使用VMware安装Linux操作系统
linux·运维·服务器
小阿轩yx2 小时前
小阿轩yx-通过state模块定义主机状态
linux·云计算·运维开发·state定义主机状态·jinja模板
PythonFun2 小时前
如何快速找回Finalshell中VPS的SSH密码
运维·ssh
花果山~~程序猿4 小时前
高级I/O知识分享【5种IO模型 || select || poll】
运维·服务器·网络
Pakho love4 小时前
Linux:软件包管理器 yum和编辑器-vim使用
linux·编辑器·vim
吴半杯4 小时前
Linux-mysql5.7-mysql8.0安装包下载及安装教程,二合一
linux·运维·服务器
默行默致4 小时前
Linux 常用命令
linux·运维
魏 无羡4 小时前
pgsql 分组查询方法
java·服务器·数据库
码哝小鱼5 小时前
firewalld实现NAT端口转发
linux·网络