重庆思庄Oracle、Redhat认证学习论坛

标题: linux find命令将查找到的文件批量删除方法 [打印本页]

作者: jiawang    时间: 2023-8-18 14:54
标题: linux find命令将查找到的文件批量删除方法
本帖最后由 jiawang 于 2023-8-18 14:56 编辑


linux find命令将查找到的文件批量删除全盘搜索系统中所有后缀为.mp4的文件,并删除所有查找到的文件:
1
[root@linuxcool ~]# find / -name "*.mp4" -exec rm -rf {} \;




补充知识

Linux中find三种删除方式,常用于crontab定时任务和shell脚本find 查看删除的三种方式,如删除当前目录下的TXT文件:
方法1:xargs rm -f
1
find ./ -type f -name "*txt" |xargs rm -f




方法2:-exec rm -f
1
find ./ -type f -name "*txt*" -exec rm -f {} \;




-exec命令是查找到的每个文件调用一次rm命令,因此速度最慢
方法3:-delete
1
find ./ -type f -name "*txt" -delete




如果一次删除大量文件,建议采用第三种方式。经测试在删除千万级文件时,第三种方式比前两种快百倍。
删除时,常用参数:

0、按文件类型查找-type:后面指定文件的类型。
b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。

1、按文件名查找-name: 查找时文件名大小写敏感。
-iname: 查找时文件名大小写不敏感。

2、按文件时间属性查找
1
2
3
4
5
6
7
8
9
-atime -n[+n]: 找出文件访问时间在n日之内[之外]的文件。
-ctime -n[+n]: 找出文件更改时间在n日之内[之外]的文件。
-mtime -n[+n]: 找出修改数据时间在n日之内[之外]的文件。
-amin -n[+n]: 找出文件访问时间在n分钟之内[之外]的文件。
-cmin -n[+n]: 找出文件更改时间在n分钟之内[之外]的文件。
-mmin -n[+n]: 找出修改数据时间在n分钟之内[之外]的文件。

find -ctime -2        #找出距此时2天之内创建的文件
find -ctime +2        #找出距此时2天之前创建的文件





3、按指定目录深度查找
-maxdepth: 后面的参数表示距当前目录指定的深度,其中1表示当前目录,2表示一级子目录,以此类推。在指定该选项后,find只是在找到指定深度后就不在递归其子目录了。

4、排除指定子目录查找-path pathname -prune: 避开指定子目录pathname查找。
-path expression -prune: 避开表达中指定的一组pathname查找。
需要说明的是,如果同时使用-depth选项,那么-prune将被find命令忽略。

5、按文件大小查找-size [+/-]100[c/k/M/G]: 表示文件的长度为等于[大于/小于]100块[字节/k/M/G]的文件。
-empty: 查找空文件。

6、实例:删除N天前的文件,将/usr/local/backups目录下所有10天前带”.”的文件删除
1
find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;




扩展:
find ~ -name "*.txt"                         #在$HOME中查找找.txt文件并显示
find ./ -name "[A-Z]*"                       #查找找以大写字母开头的文件
find ./ -name "[a-z][a-z][0–9][0–9].txt"     #查找找以两个小写字母和两个数字开头的txt文件
find ./ -type f -perm 755                    #在当前目录查找找权限为755的文件
find ./ -type d -perm 755                    #在当前目录查找找权限为755的目录
find ./ -perm 755                            #在当前目录查找找权限为755的文件和目录
find ./ -perm 755 -type f -exec ls -l {} \;  #查找找当前目录权限为755权限的文件并执行ls -l 命令
find ./ -type l                              #查找当前目录下的链接文件
find ./ -size +10                            #查找长度超过期作废10块的文件(1块=512字节)
find /etc/ -name "passwd" -exec grep -i "user1" {} \;#查看user1用户是否存在
find ./ -name test* fprint file.txt          #在当前目录下查找以test开头的文件,并把结果输出到file.txt中
find ./ -name ab* -o -name cd*               #查找以ab或cd开头的文件
find /home -mtime -2                         #在/home下查找最近两天内改动过的文件
find /home -atime -1                         #查找1天之内被存取过的文件
find /home -mmin +60                         #在/home下查找60分钟前改动过的文件
find /home -amin +30                         #查找最近30分钟前被存取过的文件
find /home -newer tmp.txt                    #在/home下查找更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt                   #在/home下查找存取时间比tmp.txt近的文件或目录
find /home -user user1                       #列出/home目录内属于用户user1的文件或目录
find /home -uid +501                         #列出/home目录内用户的识别码大于501的文件或目录
find /home -group user1                      #列出/home内组为user1的文件或目录
find /home -gid 501                          #列出/home内组id为501的文件或目录
find /home -nouser                           #列出/home内不属于本地用户的文件或目录
find /home -nogroup                          #列出/home内不属于本地组的文件或目录
find /home -name tmp.txt -maxdepth 4         #列出/home内的tmp.txt 查找时深度最多为3层
find /home -name tmp.txt -mindepth 3         #从第2层开始查找
find /home -empty                            #查找大小为0的文件或空目录
find /home -size   +512k                     #查找大于512k的文件
find /home -size   -512k                     #查找小于512k的文件
find /home -links   +2                       #查找硬连接数大于2的文件或目录
find /tmp  -name tmp.txt -exec cat {} \;     #查找tmp下名为tmp.txt的文件并cat它
find /tmp  -name tmp.txt -ok   rm {} \;      #查找tmp下名为tmp.txt的文件并删除它,-ok:删除前提示
find  / -amin    -10                         #查找在系统中最后10分钟访问的文件
find  / -atime   -2                          #查找在系统中最后48小时访问的文件
find  / -group   user1                       #查找在系统中属于user1组的文件
find  / -mmin    -5                          #查找在系统中最后5分钟里修改过的文件
find  / -mtime   -1                          #查找在系统中最后24小时里修改过的文件
find  / -nouser                              #查找在系统中属于作废用户的文件
find  / -user    user1                       #查找在系统中属于user1这个用户的文件







欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2