linux之find命令实战

0 引言

    Linux find命令功能非常强大,往往在搜索定位时具有神奇的效果,可以简化查询操作流程,往往只需一条命令搞定。

1 命令基本用法

(1)语法格式

find [路径] [选项] [操作]

(2)选型参数

选项 含义
-name 根据文件名查找
-perm 根据文件权限查找
-prune 该选项可以排除某些查找目录
-user 根据文件属主查找(所属的用户)
-group 根据文件属组查找
-mtime -n | +n 根据文件更改时间查找
-nogroup 查找无有效属组的文件
-nouser 查找无有效属主的文件
-newer file1 ! file2 查找更改时间比file1新但比file2旧的文件
-type 按文件类型查找
-size -n +n 按文件大小查找
-mindepth n 查找子目录的最小深度(按n级字目录开始搜索)
-maxdepth n 查找子目录的最大深度n(最多搜索到n级子目录)

2 案例实战

     (1)-name:查找/etc目录下以conf结尾的文件

[root@bigdata3 ~]# find /etc -name '*conf'| head -n10

(2) -iname  :查找当前目录下文件名为aa的文件(不区分大小写)

[root@bigdata3 dan_test]# find . -iname aa

(3) -user     查找文件属主为hive的所有文件

[root@bigdata3 usr]# find . -user hive

(4) -group            查找文件属组为hadoop的所有文件

[root@bigdata3 usr]# find . -group hadoop | tail -n10

(4) -type

-type			
		
		f		文件			find . -type f 
		d		目录			find . -type d
		c		字符设备文件		find . -type c
		b		块设备文件		find . -type b
		l		链接文件			find . -type l
		p		管道文件			find . -type p

(5)-size

-size
		
			-n		小于大小n的文件
			+n		大于小于n的文件

    1) 查找/etc目录下小于100000字节的文件

[root@bigdata3 etc]# find /etc -size -100000c | head -n10

2) 查找/etc目录下大于1M的文件

[root@bigdata3 etc]# find /etc -size +1M

(6)-mtime

-mtime		
		
			-n		n天以内修改的文件
			+n		n天以外修改的文件
			n		正好n天修改的文件

1) 查找/etc目录下50天之内修改且以conf结尾的文件

[root@bigdata3 etc]# find /etc -mtime -50 -name '*.conf'

2)查找/etc目录下10天之前修改且属主为root的文件

[root@bigdata3 etc]# find /etc -mtime +50 -user root

-mmin
			
			-n		n分钟以内修改的文件
			+n		n分钟以外修改的文件

3)查找/etc目录下30分钟之前修改的文件

find /etc -mmin +30

4)查找/etc目录下30分钟之内修改的目录

[root@bigdata3 etc]# find /etc -mmin -30 -type d

(7) -mindepth n   

-mindepth n		表示从n级子目录开始搜索

1) 在/etc下的6级子目录开始搜索

[root@bigdata3 etc]# find /etc -mindepth 6

(8) -maxdepth n

-maxdepth n		表示最多搜索到n级子目录

1) 在/etc下搜索符合条件的文件,但最多搜索到2级子目录

find /etc -maxdepth 2 -name '*.conf'

2)搜索二级子目录下的文件

[root@bigdata3 etc]# find /etc -mindepth 2 -maxdepth 2 -name '*.conf'

(9)-nouser

-nouser		查找没有属主的用户
find . -type f -nouser

(10)  -nogroup

-nogroup	查找没有属组的用户
		
find . -type f -nogroup

(11)  -perm

-perm  权限

查找文件为777的文件
		
find . -perm 777

(12)-prune

通常和-path一起使用,用于将特定目录排除在搜索条件之外


逻辑运算符:
	
	-a			与
	-o			或
	-not或!		        非

1)查找当前目录下所有普通文件,但排除aa目录

[root@bigdata3 dan_test]# find . -path ./aa -prune -o -type f

2)查找当前目录下所有普通文件,但排除aa和AA目录

find . -path ./aa -prune -o -path ./AA -prune -o -type f

 注意:为什么排除两个目录的时候用-o(or)而不是-a(and)呢?我们可以这样理解,若查找两个目录则用-a(A and B)相当于一个区  间内,排除的话相当于区间外,自然是or(-o).

3) 查找当前目录下所有普通文件,但排除aa和AA目录,但属主为hdfs

find . -path ./aa -prune -o -path ./AA -prune -o -type f -a -user hdfs

 4)查找当前目录下所有普通文件,但排除aa和AA目录,但属主为hdfs,且文件大小必须大于500字节

find . -path ./aa -prune -o -path ./AA -prune -o -type f -a -user hdfs -a -size +500c

 对于为什么-prune-o后面是-o而不是-a,这个解释起来比较麻烦可理解为prune的固定用法即可。

参考链接:

https://mp.csdn.net/console/editor/html/104557834

-prune用法很严格,若要忽略某个目录一般采用如下固定模式:

find 查找文件的目录 -path 需要排除的目录 -prune -o -name 需要查询的内容

注意事项:理解为固定用法就可以了(-path->-prune->-o>-print)忽略四部曲

1)-prune 必须和 -path, -o 一起使用
2)-prune -o 的顺序不 能调换
3)-name等必须放在-prune -o后面才能使用
4)如果后面有管道符号前面需要加-print参数

5)查找当前目录下的属主为hdfs或者以xml结尾的普通文件

find . -type f -a \( -user hdfs -o -name '*.xml' \)

(13) -exec

-exec   对搜索到的文件执行特定的操作,固定格式为-exec 'command' {} \;


-ok	和exec功能一样,只是每次操作都会给用户提示

1)搜索/etc下的文件(非目录),文件名以conf结尾,且大于10k,然后将其删除

find ./etc/ -type f -name '*.conf' -size +10k -exec rm -f {} \;

2)将/var/log/目录下以log结尾的文件,且更改时间在7天以上的删除

find /var/log/ -name '*.log' -mtime +7 -exec rm -rf {} \;

3) 搜索条件和例子1一样,只是不删除,而是将其复制到/root/conf目录下

find ./etc/ -size +10k -type f -name '*.conf' -exec cp {} /root/conf/ \;
发布了18 篇原创文章 · 获赞 208 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/godlovedaniel/article/details/104882262