Linux find 命令对查找到文件执行其它命令操作(xargs和-exec)

Linux find 命令不仅可以用来在指定目录下查找文件,还可以对查找到的文件执行其它命令批量操作文件,如复制,删除,修改等,本文主要介绍find 命令对查找到文件执行其它命令操作的方法。

1、find 命令参数

1)查找文件

find ./ -type f

2)查找目录

find ./ -type d

3)查找名字为test的文件或目录

find ./ -name test

4)查找名字符合正则表达式的文件,注意前面的‘.’(查找到的文件带有目录)

find ./ -regex .so.*.gz

5)查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,没有选项-print时文件列表前一行不会显示目录名称)

find ./ -type d -print -exec ls {} \;

6)查找目录并列出目录下的文件(为找到的每一个目录单独执行ls命令,执行命令前需要确认)

find ./ -type d -ok ls {} \;

7)查找目录并列出目录下的文件(将找到的目录添加到ls命令后一次执行,参数过长时会分多次执行)

find ./ -type d -exec ls {} +

8)查找文件名匹配.c的文件

find ./ -name \.c

9)查找文件更新日时在距现在时刻二天以内的文件

find ./ -mtime -2

10)查找文件更新日时在距现在时刻二天以上的文件

find ./ -mtime +2

11)查找文件更新日时在距现在时刻一天以上二天以内的文件

find ./ -mtime 2

12)查找文件更新日时在距现在时刻二分以内的文件

find ./ -mmin -2

13)查找文件更新日时在距现在时刻二分以上的文件

find ./ -mmin +2

14)查找文件更新日时在距现在时刻一分以上二分以内的文件

find ./ -mmin 2

15)查找文件更新时间比文件abc的内容更新时间新的文件

find ./ -newer abc

16)查找文件访问时间比文件abc的内容更新时间新的文件

find ./ -anewer abc

17)查找空文件或空目录

find ./ -empty

18)查找空文件并删除

find ./ -empty -type f -print -delete

19)查找权限为644的文件或目录(需完全符合)

find ./ -perm 664

20)查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录

find ./ -perm -664

21)查找用户有写权限或者组用户有写权限的文件或目录

find ./ -perm /220
find ./ -perm /u+w,g+w
find ./ -perm /u=w,g=w

22)查找所有者权限有读权限的目录或文件

find ./ -perm -u=r

23)查找用户组权限有读权限的目录或文件

find ./ -perm -g=r

24)查找其它用户权限有读权限的目录或文件

find ./ -perm -o=r

25)查找所有者为lzj的文件或目录

find ./ -user lzj

26)查找组名为gname的文件或目录

find ./ -group gname

27)查找文件的用户ID不存在的文件

find ./ -nouser

28)查找文件的组ID不存在的文件

find ./ -nogroup

29)查找有执行权限但没有可读权限的文件

find ./ -executable ! -readable

30)查找文件size小于10个字节的文件或目录

find ./ -size -10c

31)查找文件size等于10个字节的文件或目录

find ./ -size 10c

32)查找文件size大于10个字节的文件或目录

find ./ -size +10c

33)查找文件size小于10k的文件或目录

find ./ -size -10k

34)查找文件size小于10M的文件或目录

find ./ -size -10M

35)查找文件size小于10G的文件或目录

find ./ -size -10G

2、xargs和-exec

使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec执行。但某些系统对exec的命令长度有限制,执行后可能就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这种情况就需要使用xargs命令,特别是与find命令一起使用。

1)-exec的使用

find . -name "*.txt" -exec rm {} \;

2)xargs的使用

find . -name "*.txt" | xargs rm {} 

3、查找大文件

使用find命令可以递归查找一个目录中的子目录,查找目录中的大文件。

1)查找所有目录中5个最大的文件

sudo find / -type f -printf "%s\t%p\n" | sort -n | tail -5 | xargs ls -Slh

2)查找所有目录中大于100M的文件

sudo find / -type f -size +100M | xargs ls -Slh

3)查找所有目录中100M和200M之间的文件

sudo find / -type f -size +100M -size +200M | xargs ls -Slh

4、查找并复制home目录及子目录中最近7天的文件

atime是访问时间戳,最后一次读取文件的时间,mtime是修改时间戳,文件内容最后一次修改的时间。ctime是更改时间戳,上次更改文件元数据的时间。例如,其所有权、位置、文件类型和权限设置的修改。

1)使用xargs

sudo find /home -type f -mtime -7 | xargs -I {} cp {} ./cjavapy

注意:

-i 参数直接用 {}代替管道之前的标准输出的内容;

-I 参数 需要事先指定替换字符。

2)使用-exec

sudo find /home -type f -mtime -7 -exec cp {} ./cjavapy \;

注意:在\前面必须要有空格。

推荐阅读
cjavapy编程之路首页