find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,
这个时候exec的作用就显现出来了。
exec解释:
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,
考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{} 花括号代表前面find查找出来的文件名。
使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的。在有些操作系统中
只允许-exec选项执行诸如ls或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。
建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。 exec选项后面跟
随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个\,最后是一个分号;。为了使用exec选项,必须
要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。
实例1:ls -l命令放在find命令的-exec选项中
命令:
find . -type f -exec ls -l {} \;
输出:
[root@localhost test]# find . -type f -exec ls -l {} \;
-rw-r--r-- root root - : ./log2014.log
-rw-r--r-- root root - : ./test4/log3-.log
-rw-r--r-- root root - : ./test4/log3-.log
-rw-r--r-- root root - : ./test4/log3-.log
-rw-r--r-- root root - : ./log2013.log
-rw-r--r-- root root - : ./log2012.log
-rw-r--r-- root root - : ./log.log
-rw-r--r-- root root - : ./log.txt
-rw-r--r-- root root - : ./test3/log3-.log
-rw-r--r-- root root - : ./test3/log3-.log
-rw-r--r-- root root - : ./test3/log3-.log
[root@localhost test]#
说明:
上面的例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。
实例2:在目录中查找更改时间在n日以前的文件并删除它们
命令:
find . -type f -mtime + -exec rm {} \;
输出:
[root@localhost test]# ll
总计
-rw-r--r-- root root - : log2012.log
-rw-r--r-- root root - : log2013.log
-rw-r--r-- root root - : log2014.log
lrwxrwxrwx root root - : log_link.log -> log.log
-rw-r--r-- root root - : log.log
-rw-r--r-- root root - : log.txt
drwxr-xr-x root root - : scf
drwxrwxrwx root root - : test3
drwxrwxrwx root root - : test4
[root@localhost test]# find . -type f -mtime + -exec rm {} \;
[root@localhost test]# ll
总计
-rw-r--r-- root root - : log2012.log
lrwxrwxrwx root root - : log_link.log -> log.log
drwxr-xr-x root root - : scf
drwxrwxrwx root root - : test3
drwxrwxrwx root root - : test4
[root@localhost test]#
说明:
在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,
可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
实例3:在目录中查找更改时间在n日以前的文件并删除它们,在删除之前先给出提示
命令:
find . -name "*.log" -mtime + -ok rm {} \;
输出:
[root@localhost test]# ll
总计
-rw-r--r-- root root - : log2012.log
lrwxrwxrwx root root - : log_link.log -> log.log
drwxr-xr-x root root - : scf
drwxrwxrwx root root - : test3
drwxrwxrwx root root - : test4
[root@localhost test]# find . -name "*.log" -mtime + -ok rm {} \;
< rm ... ./log_link.log > ? y
< rm ... ./log2012.log > ? n
[root@localhost test]# ll
总计
-rw-r--r-- root root - : log2012.log
drwxr-xr-x root root - : scf
drwxrwxrwx root root - : test3
drwxrwxrwx root root - : test4
[root@localhost test]#
说明:
在上面的例子中, find命令在当前目录中查找所有文件名以.log结尾、更改时间在5日以上的文件,并删除
它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除。 实例4:-exec中使用grep命令
命令:
find /etc -name "passwd*" -exec grep "root" {} \;
输出:
[root@localhost test]# find /etc -name "passwd*" -exec grep "root" {} \;
root:x:::root:/root:/bin/bash
root:x:::root:/root:/bin/bash
[root@localhost test]#
说明:
任何形式的命令都可以在-exec选项中使用。 在上面的例子中我们使用grep命令。find命令首先匹配所有文件
名为“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后执行grep命令看看在这些文件中是否存
在一个root用户。
实例5:查找文件移动到指定目录
命令:
find . -name "*.log" -exec mv {} .. \;
输出:
[root@localhost test]# ll
总计 12drwxr-xr-x root root - : scf
drwxrwxr-x root root - : test3
drwxrwxr-x root root - : test4
[root@localhost test]# cd test3/
[root@localhost test3]# ll
总计
-rw-r--r-- root root - : log2012.log
-rw-r--r-- root root - : log2013.log
-rw-r--r-- root root - : log2014.log
[root@localhost test3]# find . -name "*.log" -exec mv {} .. \;
[root@localhost test3]# ll
总计 [root@localhost test3]# cd ..
[root@localhost test]# ll
总计
-rw-r--r-- root root - : log2012.log
-rw-r--r-- root root - : log2013.log
-rw-r--r-- root root - : log2014.log
drwxr-xr-x root root - : scf
drwxrwxr-x root root - : test3
drwxrwxr-x root root - : test4
[root@localhost test]#
实例6:用exec选项执行cp命令
命令:
find . -name "*.log" -exec cp {} test3 \;
输出:
[root@localhost test3]# ll
总计 [root@localhost test3]# cd ..
[root@localhost test]# ll
总计
-rw-r--r-- root root - : log2012.log
-rw-r--r-- root root - : log2013.log
-rw-r--r-- root root - : log2014.log
drwxr-xr-x root root - : scf
drwxrwxr-x root root - : test3
drwxrwxr-x root root - : test4
[root@localhost test]# find . -name "*.log" -exec cp {} test3 \;
cp: “./test3/log2014.log” 及 “test3/log2014.log” 为同一文件
cp: “./test3/log2013.log” 及 “test3/log2013.log” 为同一文件
cp: “./test3/log2012.log” 及 “test3/log2012.log” 为同一文件
[root@localhost test]# cd test3
[root@localhost test3]# ll
总计
-rw-r--r-- root root - : log2012.log
-rw-r--r-- root root - : log2013.log
-rw-r--r-- root root - : log2014.log
[root@localhost test3]#

linux命令学习笔记(20):find命令之exec的更多相关文章

  1. linux命令学习笔记( 2 ) : cd 命令

    Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的. 所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. . 命 ...

  2. linux命令学习笔记( 7 ) : mv 命令

    mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令, 经常用来备份文件或者目录. .命令格式: mv [选项] 源文件或目 ...

  3. Linux基础学习笔记以及常用命令

    1.windows自带命令进入mysql所在磁盘   2.进入mysql安装目录的bin文件 D:\>cd D:\Program Files (x86)\mysql-5.5.25-winx64\ ...

  4. linux命令学习笔记(62)-curl命令-url下载工具

    linux curl是一个利用URL规则在命令行下工作的文件传输工具.它支持文件的上传和下载,所以是综合 传输工具,但按传统,习惯称url为下载工具. 一,curl命令参数,有好多我没有用过,也不知道 ...

  5. Linux命令学习笔记目录

    Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...

  6. 【Redis】命令学习笔记——键(key)(20个超全字典版)

    安装完redis和redis-desktop-manager后,开始学习命令啦!本篇基于redis 4.0.11版本,从对键(key)开始挖坑! 准备工作,使用db1(默认db0,由于之前练习用db0 ...

  7. linux基础命令学习笔记(二)

    linux基础命令学习笔记(二) 1.kill :终止进程  kill pid (唯一标示一个进程) kill -9  强制终止  kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...

  8. 【Redis】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)

    本篇基于redis 4.0.11版本,学习列表(list)和集合(set)和有序集合(sorted set)相关命令. 列表按照插入顺序排序,可重复,可以添加一个元素到列表的头部(左边)或者尾部(右边 ...

  9. linux命令学习笔记(25):linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组. 最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loc ...

  10. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

随机推荐

  1. IOS启动页动画(uiview 淡入淡出效果 )2

    Appdelegate里面右个这个函数,只要它没结束,你的等待界面就不会消失.以在启动的时候做些动画 - (BOOL)application:(UIApplication *)application ...

  2. thinkPHP5.0的学习研究【架构】

    2017年6月19日18:51:53 架构:1.ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方式来组织.2.MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC ...

  3. 【BZOJ3651】网络通信 LCT

    [BZOJ3651]网络通信 Description 有一个由M 条电缆连接的 N 个站点组成的网络.为了防止垄断,由 C 个公司控制所有的电缆,规定任何公司不能控制连接同一个站点的两条以上的电缆(可 ...

  4. 【BZOJ2790】[Poi2012]Distance 筛素数+调和级数

    [BZOJ2790][Poi2012]Distance Description 对于两个正整数a.b,这样定义函数d(a,b):每次操作可以选择一个质数p,将a变成a*p或a/p, 如果选择变成a/p ...

  5. 多语言中的“默认语言”设置

    最近在搞一个多语言的东西,打算如果用户是中文环境就显示中文,其他任何非中文环境就显示英文.换句话说,把默认语言设置成英文. 不过因为VS是中文的,发现即使默认资源文件是英文(AppResource.r ...

  6. Kerberos Ticket管理

    Kerberos Ticket管理 本章介绍如何管理您的Kerberos Ticket,这里的Ticket是指Ticket-Granting-Ticket(TGT),是您访问集群中服务的凭证.我们假设 ...

  7. Wrapper配置详解及高级应用

      将一个简单的程度如HelloWorld 的应用包装秤Wrapper 服务并不复杂,甚至可以认为非常简单.但是实际项目应用过程中我们的程序一般较庞大,运行环境也较复杂. 通过Wrapper 配置文件 ...

  8. 导入android sdk samples工程报错"did you mean to use @+id instead of @+android:id?"

    导入“D:\adt-bundle-windows-x86_64-20140702\sdk\samples\android-15”中的工程报错 did you mean to use @+id inst ...

  9. afinal 文件上传、下载、图片加载实例

    // Afinal框架讲解 public class AfinalActivity extends FinalActivity { @ViewInject(id=R.id.bt_afinal_load ...

  10. UVALive - 6257 K - Chemist's vows 【DFS】【BFS】【DP】

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...