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

多行输入单行输出:

相关推荐
ctrigger23 分钟前
AI回答:Linux C/C++编程学习路线
linux·c语言·c++
蛊明2 小时前
下载CentOS 10
linux·运维·centos
北京-宏哥2 小时前
Linux系统安装MySQL5.7(其他版本类似)避坑指南
linux·运维·服务器
Aphelios3802 小时前
Linux 下 VIM 编辑器学习记录:从基础到进阶(下)
java·linux·学习·编辑器·vim
qw9492 小时前
Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复
linux·运维·服务器
丶只有影子2 小时前
【Nacos】从零开始启动Nacos服务(windows/linux)
linux·运维·windows·微服务·springcloud
青年vs阳光2 小时前
win10把c盘docker虚拟硬盘映射迁移到别的磁盘
运维·docker·容器
-SGlow-3 小时前
Linux相关概念和易错知识点(30)(线程互斥、线程同步)
linux·运维·服务器
技术小齐3 小时前
网络运维学习笔记 021 HCIA-Datacom新增知识点02 SDN与NFV概述
运维·网络·学习
茂茂在长安4 小时前
Linux 命令大全完整版(11)
java·linux·运维·服务器·前端·centos