Linux使用find命令查找并对查找结果执行某个操作(-exec)

find 是我们很常用的一个Linux命令,但是我们一般查找出来的额并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了。

  exec解释:
  -exec 参数后面跟的是 command 命令,它的终止是以“;”为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。  

  {} 花括号代表前面find查找出来的文件名。

  使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find 查找,很方便的。在有些操作系统中,只允许 -exec 选项执行诸如 ls 或 ls -l 这样的命令。大多数用户使用着一些选项是为了查找旧文件并删除它们。建议再真正执行 rm 命令删除文件之前,最好先用 ls 命令看一下,确认他们是所要删除的文件。 exec 选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号。为了使用 exec 选项,必须要同时使用 print 选项。如果验证一下 find 命令,会发现该命令只输出从当前路径起的相对路径及文件名

实例1

查找当前目录下的所有png文件,并将查找结果复制到 /home/robin/png/下

[root@VM_0_8_centos home]# find -name "*.png" -exec cp -r {} /home/robin/png/ \;

实例2

定时将网站目录/VAR/WWW/HTML/整站打包备份,并删除5天前的备份数据(附计划任务data_back.sh文件)

#!/bin/bash
#name:Discuz_BF.sh
# 这是一个备份网站目录的Shell程序

#crontab -e 启用定时任务 ***** 分 时 日 月 周 
#0 4 * * * /var/www/html/data_backup.sh

DATE=`date +%Y%m%d%H%M`                #every minute
DATA_NAME=www
BACKUP_PATH=/home/robin/mysql_backup/

#将html文件夹压缩到*.tar.gz
tar -zcvf ${BACKUP_PATH}${DATA_NAME}_${DATE}.tar.gz -C /var/www html/

#just backup the latest 5 days,保留5天的数据
find ${BACKUP_PATH} -mtime +5 -name "${DATA_NAME}_*.tar.gz" -exec rm -f {} \;

实例3

查找大于1GB的文件(G:GB M:Mb)

robin@robin-B450M-GAMING:~$ find /home/download/ -type f -size +1G

实例4

查找所有的mp4格式的视频文件,并将文件名及大小输出到movie.txt文档中

robin@robin-B450M-GAMING:/media/robin/sda-media/电影$ find -name ‘*.mp4’ -exec du -sh {} > ~/movie.txt \;