find
Posted wx622ea1d31aab0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了find相关的知识,希望对你有一定的参考价值。
[TOC]
文件查找命令 find
day21 find选项
## 语法
find [路径] [选项] [表达式] [动作]
动作: -ls 查看详细属性
-delete 删除 都容易出bug
按文件类型查找 -type
## 选项
#1.按文件类型查找 -type
f:普通文件
d:目录
l:软链接
p:管道符
s:安全套接字文件
b:块设备文件
c:字符设备文件
find / -type f #查找 /下面的所有普通文件
按文件大小 -size (xargs)
+num:查找大于指定数大小文件
-num:查找小于指定数大小文件
num:查找指定数大小文件(不是很精准)
# 栗子
查找当前目录大于5k 小于10k的文件
04:21:05 root@miaosen,10.0.0.100:<sub> # find -size +5k -size -10k
./.viminfo
0 ✓ 04:21:13 root@miaosen,10.0.0.100:</sub> # du -h .viminfo
8.0K .viminf
## xargs:读取输入数据重新格式化后输出()
默认分隔符是空格
# 选项
-nn:多行输出(第二个n代表阿拉伯数字)
0 ✓ 05:04:47 root@miaosen,10.0.0.100:<sub> # cat test1.txt |xargs -n2
1 2
3 4
5 6
-d:自定义以什么为分隔符
0 ✓ 05:08:10 root@miaosen,10.0.0.100:</sub> # echo nameXnameXnameX | xargs -d X
name name name
-d -nn
0 ✓ 05:08:30 root@miaosen,10.0.0.100:<sub> # echo nameXnameXnameX | xargs -dX -n2
name name
name
-i:指定数据流的位置,将数据流放入中
# 查找当前目录下大于25k小于30k的文件并移动到/tmp下
0 ✓ 05:15:52 root@miaosen,10.0.0.100:</sub> # find -type f -size +25k -size -30k |xargs -i mv /tmp
0 ✓ 05:16:14 root@miaosen,10.0.0.100:~ # ll
total 0
按文件名-size
-name:严格区分大小写
0 ✓ 04:27:38 root@miaosen,10.0.0.100:<sub> # find ./ -name sj
./sj
-iname:不区分大小写
0 ✓ 04:27:53 root@miaosen,10.0.0.100:</sub> # find ./ -iname sj
./sj
./SJ
# *任意字符
# 查找不区分大小写sj并前面有任意字符的文件名
0 ✓ 04:28:08 root@miaosen,10.0.0.100:<sub> # find ./ -iname *sj
./sj
./SJ
# 查找不区分大小写sj并后面有任意字符的文件名
0 ✓ 04:28:50 root@miaosen,10.0.0.100:</sub> # find ./ -iname sj*
./sj
./SJ
./SJ1.txt
# 查找不区分大小写sj并前后有任意字符的文件名
0 ✓ 04:28:58 root@miaosen,10.0.0.100:<sub> # find ./ -iname *sj*
./sj
./SJ
./SJ1.txt
./godSJ1.txt
# 满足其中一个条件 -o:or 或
0 ✓ 04:36:39 root@miaosen,10.0.0.100:</sub> # find ./ -iname *sj -o -name *1.txt
./sj
./SJ
./SJ1.txt
./godSJ1.txt
./11SJl1.txt
### 两个条件都要满足名字带sj和尾巴有1.txt的文件
0 ✓ 04:43:33 root@miaosen,10.0.0.100:~ # find ./ -iname *sj* -name *1.txt
./SJ1.txt
./godSJ1.txt
./11SJl1.tx
按文件时间查找
-atime:文件访问时间查找
-mtimi:文件内容创建,修改时间查找
-ctime:文件属性,修改时间查找
num:查找第N天的文件(不包括今天)
+num:查找第n天之前的所有文件(不包括今天)
-num:查找从今天开始算n天文件
## 一个文件有以下三种时间
# 查看方法 stat 文件名
access time:atime
modify time:mtime
change time:ctime
# 查看三种时间
0 ✓ 05:22:23 root@miaosen,10.0.0.100:~ # stat /tmp/test1.txt
File: ‘/tmp/test1.txt’
Size: 25798 Blocks: 56 IO Block: 4096 regular file
Device: 803h/2051d Inode: 33574982 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-04-18 05:15:01.747729323 +0800
Modify: 2022-04-18 05:15:01.748729323 +0800
Change: 2022-04-18 05:16:14.502724735 +0800
Birth: -
按照文件用户和组查找
-user:查找文件的属主
-nouser:文件没有属主用户的
-group:查找文件的属组
-nogroup:文件没有属组的
多条件组合查找
# 查找/tmp/下的普通文件名字不区分大小写带test文件大小大于1k查找从今天开始到第二天的所有文件
0 ✓ 05:48:01 root@miaosen,10.0.0.100:~ # find /tmp/ -type f -iname *test* -size +1k -mtime -2
/tmp/test1.txt
day22 find
按权限查找
-perm
## 权限精确查找
0 ✓ 05:54:43 root@miaosen,10.0.0.100:<sub> # ll
total 0
drwxr-xr-x 2 root root 6 Apr 18 05:54 123
-rw-r--r-- 1 root root 0 Apr 18 05:54 31
--w--w--w- 1 root root 0 Apr 18 05:54 sj
0 ✓ 05:54:43 root@miaosen,10.0.0.100:</sub> # find -perm 222
./sj
## -权限
# 每个权限位上,都要包含该数字权限的所有权限
0 ✓ 06:01:57 root@miaosen,10.0.0.100:<sub> # find -perm -700 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
0 ✓ 06:01:59 root@miaosen,10.0.0.100:</sub> # find -perm -755 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
0 ✓ 06:02:56 root@miaosen,10.0.0.100:<sub> # find -perm -777 |xargs ls -ld
dr-xr-x---. 3 root root 175 Apr 18 05:54 .
0 ✓ 06:03:04 root@miaosen,10.0.0.100:</sub> # find -perm -744 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
0 ✓ 06:03:36 root@miaosen,10.0.0.100:<sub> # find -perm -711 |xargs ls -ld
drwxr-xr-x 2 root root 6 Apr 18 05:54 ./123
## /权限
# 总共三个权限位,只要有一个权限位的权限被包含,就可以找到
0 ✓ 06:08:48 root@miaosen,10.0.0.100:</sub> # find -perm /644
属主权限位,有一个r或者有一个w就满足条件
属组权限位,有一个r就满足条件
其他用户权限位,有一个r就满足条件
按深度查找
-maxdepth
针对目录层级查找
# 查找/etc/目录下的所有一级和二级目录
0 ✓ 06:13:09 root@miaosen,10.0.0.100:~ # find /etc/ -type d -maxdepth 2
find动作
-print:打印查找到的内容到终端上(find命令默认就是打印结果-print)
-ls:查看文件的详细信息 |xargs ls-l或者ls-l$(find xxx)或者ls-l`find xxx`
-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录
其他删除方法: |xargs rm-fr或者rm-fr$(find xxx)或者rm-fr`find xxx`
-ok:找到文件后,执行后面的bash命令,询问是否要操作 # 语法:-ok 系统命令 \\;
130 ✗ 06:19:03 root@miaosen,10.0.0.100:<sub> # find -type f -ok cp /tmp \\;
< cp ... ./.bash_logout > ? y
< cp ... ./.cshrc > ? n
< cp ... ./.tcshrc > ? n
< cp ... ./.bash_history > ? n
< cp ... ./.lesshst > ? n
< cp ... ./.bashrc > ? n
< cp ... ./.bash_profile > ? n
< cp ... ./.viminfo > ? n
< cp ... ./31 > ? n
< cp ... ./sj > ?
-exec:找到文件后,执行后面的bash命令
# 语法:-exec 系统命令 \\;
130 ✗ 06:22:08 root@miaosen,10.0.0.100:</sub> # find -type f -exec cp /tmp \\;
find多条件
-a:和,并且(默认)
-o:或者
!:取反
以上是关于find的主要内容,如果未能解决你的问题,请参考以下文章