Linux系统管理-find文件查找

Linux系统管理-find文件查找

find概述

为什么要使用文件查找

有些时候,我们可能会忘了某个文件所在的位置,此时就需要通过find来查找。

还有些时候,我想要找到,某个目录下,所有小于1k的文件。

还还有些时候,我们想要找到,某个目录下,7天之前创建的文件。

还还还有些时候,我们想找到,某个目录下,所有以.sh结尾的脚本。

Linux系统中的find命令在查找文件时非常有用而且方便。

find的作用

它可以根据不同的条件来进行查找文件:例如权限、拥有者、修改日期/时间、文件大小等等。 同时find命令是Linux下必须掌握的。

find 命令的基本语法如下

命令路径选项表达式动作
find[path…][options……][expression][action]
查找地区工作岗位投简历面试
视频路径欧美科幻

find查找示例

find根据文件名查找

-name

# 查找/etc目录下包含ifcfg名称的文件
[root@oldboy ~]# find /etc/sysconfig/ -name 'ifcfg*'
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-eth0

# -i 忽略大小写
[root@oldboy ~]# find /etc/sysconfig/ -iname 'ifcfg*'

find根据文件类型查找

-type

f:普通文件
[root@oldboy ~]# find /tmp -type f
	
d:目录文件
[root@oldboy ~]# find /tmp/ -type d
/tmp/test
/tmp/test/test01

l:软链接文件
s:安全套接字文件
b:块设备文件
p:管道文件

# 多选项组合查找
-a:and 和	且
[root@oldboy ~]# find /etc/ -type d -name 'conf*' -a -name 'config'
-o:or  或	或	
[root@oldboy ~]# find /etc/ -type d -name 'conf*' -o -name 'config'
!:	 取反		非
[root@oldboy ~]# find /etc/ -type d ! -name 'conf*'

find根据文件大小查找

-size
+5M:查找大于5M的文件
[root@oldboy ~]# find /etc/ -type f -size +5M|xargs du -sh

-5M:查找小于5M的文件
[root@oldboy ~]# find /etc/ -type f -size -5M|xargs du -sh

5M:查找等于5M的文件
[root@oldboy ~]# find /etc/ -type f -size 5M|xargs du -sh
# 同时满足大于1M,小于5M的文件都找出来
[root@oldboy ~]# find /etc -size +1M -a -size -5M|xargs du -sh
3.8M    /etc/selinux/targeted/active/policy.kern

find根据时间查找

-mtime:修改文件内容的时间
-atime:访问文件内容的时间
-ctime:修改文件元数据的时间 
+7:查找7天之前的,不包含今天
[root@oldboy /tmp]# find ./ -name 'file*' -mtime +7

-7:查找7天之内的,包含今天
[root@oldboy /tmp]# find ./ -mtime -7

7:查找不包含今天,往前数第七天的
[root@oldboy /tmp]# find ./ -mtime 7
# 删除近七天之前的所有文件
[root@oldboy /tmp]# find ./ -name 'file*' -mtime +7 -delete

find根据用户来查找

-user		根据用户名查找
[root@oldboy /tmp]# find / -user ld 2>/dev/null

-group		根据组来查找
[root@oldboy /tmp]# find / -group ld 2>/dev/null
-nouser		查找没有用户的文件
-nogroup	查找没有组的文件

find按深度查找

-maxdepth
[root@oldboy /tmp]# find /etc -maxdepth 1 -type f

find根据权限查找

-perm	
# 精确查找
[root@oldboy /tmp]# find / -perm 222

# 模糊匹配包含-后面的对应权限
[root@oldboy /tmp]# find ./ -perm -233|xargs stat -c %a

find的处理动作(重点)

当查找到一个文件后, 需要对文件进行如何处理, 默认动作 -print

动作含义
-print打印查找到的内容(默认)
-ls以长格式显示的方式打印查找到的内容(就近原则)
-delete删除查找到的文件(就近原则,也只能删除空目录)
-ok后面跟自定义shell命令(会一直提示是否操作)标准写法 -ok ;
-exec后面跟自定义shell命令(标准写法-exec ;)
# -print
[root@oldboy /tmp]# find ./ -mtime 3 -print
./file-27

# -ls
[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*' -ls
16777294    0 -rw-r--r--   1 root     root            0 Jun 30 00:52 ./test1

#-delete
[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*' -delete

# -ok
[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*' -ok ls -l \;
< ls ... ./test1 > ? y
total 2716
-rw-r--r--. 1 root root      29 Jun 18 15:20 date.txt

#-exec
[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*' -exec ls -l \; (查看了当前路径下test开头文件的详细属性)
[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*' -exec cp {} /opt/ \; (就近原则复制,只复制了test开头的文件)

xargs结合find使用

[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*'|xargs cp -t /opt/ (-t:颠倒源文件和目标文件的位置)(因为xargs默认把从左边接收的数据放到右边命令的最后面)
[root@oldboy /tmp]# find ./ -name 'file*' -o -name 'test*'|xargs -I {} cp {} /opt/

练习题

1.查找/tmp目录下,属主不是root,切文件名不是以f开头的文件
find /tmp ! -user root ! -name 'f*'
find /tmp ! \( -user root -a -name 'f*' \)

2.查找/var目录下属主为root,切属组为mail的所有文件
find /var -user root -group mail
3.查找/var目录下不属于root、oldboy、zls组的所有文件
find /var ! -group root -a  ! -group oldboy -a  ! -group zls \)
find /var \( -group root -o -group oldboy -o -group zls \)

4.查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件
find /var -mtime -7 ! -user root -a ! -user postfix

5.查找/etc/下所有大于1M且类型为普通文件的所有文件
find /etc/ -size +1M -type f

6.将/etc中的所有目录(仅目录)复制到/tmp下,目录结构不变
[root@oldboy /tmp]#  find /etc/ -type d|xargs -I {} mkdir -p /tmp/{}

7.将/etc目录复制到 /var/tmp,/var/tmp/etc的所有目录权限为777,/var/tmp/etc/目录中所有文件权限为666
[root@oldboy /tmp]# cp -r /etc /var/tmp
[root@oldboy /tmp]# find /var/tmp/etc -type d|xargs chmod 777
[root@oldboy /tmp]# find /var/tmp/etc ! -type f|xargs chmod 666

9.创建touch file{1..10}10个文件,保留file9,其他一次全部删除
[root@oldboy /tmp]# touch file{1..10}
[root@oldboy /tmp]# find ./ ! -name 'file9' -delete 2>/dev/null

10.解释如下每条命令的含义
# 在/root/下创建dir1mulu
mkdir /root/dir1

# 在/root/dir1/下创建file1……file10文件
touch /root/dir1/file{1..10}

# 在/root/dir1下 查找名字是‘file5’的普通文件
find /root/dir1 -type f -name 'file5'

# 在/root/dir1下查找除了名字是‘file5’的所有文件
find /root/dir1 ! -name 'file5'

# 在/root/dir1下查找名字是‘file5’的文件和名字是‘file9’的文件
find /root/dir1 -name 'file5' -o -name 'file9'

# 在/root/dir1下查找名字是‘file5’的文件和名字是‘file9’的文件并以详细信息的形式列出来‘file9’
find /root/dir1 -name 'file5' -o -name 'file9' -ls

# 在/root/dir1下查找名字是‘file5’的文件和名字是‘file9’的文件并以详细信息的形式列出来
find /root/dir1 (-name 'file5' -o -name 'file9' ) -ls

# 在/root/dir1下查找名字是‘file5’的文件和名字是‘file9’的文件并删除
find /root/dir1 (-name 'file5' -o -name 'file9' ) -exec rm -rvf {} \;

# 在/root/dir1下查找除了名字是‘file5’的文件和名字是‘file9’的文件并删除
find /root/dir1 ! (-name 'file5' -o -name 'file9' ) -exec rm -vf {} \;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值