find之exec和args

本来以为以前的差不多够用了。呵呵,看到很多高手用高技巧,心痒痒的觉得我自己还可以提升啊。。哈哈哈。

这个实践起来之后,,SED,AWK也得深化一下,,,SHELL和PYTHON,作运维的两样都不能废。。。

~~~~~~~~~~~~~~~~~~~~~

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


-exec
    1.参数是一个一个传递的,传递一个参数执行一次rm
    2.文件名有空格等特殊字符也能处理
-xargs 
    1.一次将参数传给命令,可以使用-n控制参数个数
    2.处理特殊文件名需要采用如下方式:
    find . -name "*.txt" print0 |xargs -0 rm {} 

~~~~~~~~~~~~~~~

相比之下,也不难看出各自的缺点
1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好; 
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \; 作为命令的结束符,书写不便。
3、xargs 不能操作文件名有空格的文件;
综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,
那么使用 xargs比较方便; 否则,就要用 exec了。
~~~~~~~~~~~~~~~~~~~~
一般有2中写法:
#find ... -exec rm {} \; 
#find ... | xargs rm -rf
两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exec选项,后者xargs命令会分批次的处理结果。
xargs优点:由于是批处理的,所以执行效率比较高(通过缓冲方式)
xargs缺点:有可能由于参数数量过多(成千上万),导致后面的命令执行失败
若换成 find ....-execrm {} \; 的话,
因为rm 是"逐个" item 去处理的, 则无此忧虑
rm不接受标准输入,所以不能用find / -name "tmpfile" |rm
-exec 必须由一个 ; 结束,而因为通常 shell 都会对 ; 进行处理,所以用 \; 防止这种情况。 
{} 可能需要写做 '{}',也是为了避免被 shell 过滤。
例子:
cd /home/useway/DataBackup
find ./ -type f -mtime +30 -exec rm -fr {} \; > /dev/null 2>&1
./表示从当前目录找 
-type f,表示只找file,文件类型的,目录和其他字节啥的不要
-mtime +30 表示30天前的文件。
-exec 把find到的文件名作为参数传递给后面的命令行,代替{}的部分 
-exec后便跟的命令行,必须用“ \;”结束
 /dev/null 2>&1 这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.
~~~~~~~~~~~~~~~~~~~~~~~~

一、find 命令格式


1、find命令的一般形式为;

find pathname -options [-print -exec -ok ...]


2、find命令的参数;

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print: find命令将匹配的文件输出到标准输出。
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {} \;,注意{}和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。


3、find命令选项

-name按照文件名查找文件。-perm
按照文件权限来查找文件。-prune
使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。-user
按照文件属主来查找文件。-group
按照文件所属的组来查找文件。-mtime -n +n
按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。-nogroup
查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。-nouser
查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2查找更改时间比文件file1新但比文件file2旧的文件。
-type查找某一类型的文件,诸如:b - 块设备文件。
d - 目录。
c - 字符设备文件。
p - 管道文件。
l - 符号链接文件。
f - 普通文件。-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。-mount:在查找文件时不跨越文件系统mount点。
-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

另外,下面三个的区别:

   -amin n
查找系统中最后N分钟访问的文件-atime n
查找系统中最后n*24小时访问的文件-cmin n
查找系统中最后N分钟被改变文件状态的文件-ctime n
查找系统中最后n*24小时被改变文件状态的文件-mmin n
查找系统中最后N分钟被改变文件数据的文件-mtime n
查找系统中最后n*24小时被改变文件数据的文件


4、使用exec或ok来执行shell命令

使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的

在有些操作系统中只允许-exec选项执行诸如l s或ls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。

exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

转载于:https://www.cnblogs.com/aguncn/p/4133924.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 字符串分割陷阱

Java中关于字符串有一个split方法,这个方法可以实现分割字符串的作用; 但是如果使用一些正则表达式中出现的字符时Java编译器会报错, 如: String str "com.zhangsan.lisi.wangwu"; String[] strArray str.split(…

Linux 复习重点目录

Linux安全复习 一、Linux基本命令 1、文件管理命令 lvm 2、用户管理命令 3、网络管理命令 4、权限管理 普通权限和特殊权限 权限命令修改 5、服务命令 6、软件安装管理命令 yum安装 prm包安装 源码包安装 7、vim 、cat 、more、less文件处理 8、进程管理 top、ps、计划任务、守…

java Math 方法

Math.round(12.49)12; Math.round(12.50)13; Math.round(0.5)1; Math.round(0.49)0; Math.round(-0.51)-1; Math.round(-0.5)0; Math.floor(-0.50)-1.0; Math.floor(-0.001)-1.0; Math.floor(12.50)12.0; Math.floor(12.99)12.0;

LeetCode First Missing Positive

Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 解题思路:数组总共有n个数,若都是连续的…

[java] 虚拟机(JVM)底层结构详解[转]

[java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本语法到SSH框架。这里面应该包含…

jquery扩张函数

//jquery扩展函数判断是否是手机号码 $.fn.isMobile function(){ alert("zhangsan"); var tmptxt$(this).val().trim(); var RegEx/^1[3|4|5|8][0-9]\d{8}$/;return RegEx.test(tmptxt); }; //jquery扩展函数判断是否是固定电话 $.fn.isTel function()…

用计算器计算“异或CRC”

再计算器上输入以下数字,每输入一个数字,按一下“Xor” 转载于:https://www.cnblogs.com/YangBinChina/p/4164513.html

Java正则表达式较验手机号、邮箱

import java.util.regex.Matcher; import java.util.regex.Pattern; public class PatternTest { /** * 验证邮箱地址是否正确 * param email * return */ public static boolean checkEmail(String email){ boolean flag false; try{ String check "^([a-z0…

ios数据库

1. ios数据库管理软件 ios使用的数据库是sqlite 管理软件有2种, 我只记得一种, 名字叫做 MesaSQLite 2. sqlite数据库 2.1.修改表结构 ①:更改字段类型长度 ALTER TABLE 表名 ALTER COLUMN 字段名 类型的长度--varchar(50) 例:把城市表的城市字段原来长度…

【discuz x3】源代码中的sql调用

【discuz x3】源代码中的sql调用 http://blog.csdn.net/yanhui_wei/article/details/17554655转载于:https://www.cnblogs.com/actorai/p/4168405.html

Mybatis的模糊查询

方法1&#xff1a;在其它地方对其进行相关处理&#xff0c;语句与正常的查询无异 在sqlMap中与正常的无异&#xff0c;如下所示&#xff1a; <select id"getNovaUserInfoByNickLike" resultMap"novaUserInfoMap"> <include refid"selectNo…

跨域(三)——JSONP

一、什么是JSONP? 百度百科&#xff1a;JSONP(JSON with Padding)是JSON的 一种“使用模式”&#xff0c;可用于解决主流浏览器的跨域数据访问的问题。由于同源策略&#xff0c;一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通&#xff0…

Spring DAO之JDBC

Spring提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术&#xff0c; 如JDBC&#xff0c;Hibernate或者JDO等。它不仅可以让你方便地在这些持久化技术间切换&#xff0c; 而且让你在编码的时候不用考虑处理各种技术中特定的异常。为了便于以一种…

程序猿是如何解决SQLServer占CPU100%的

文章目录 遇到的问题使用SQLServer Profiler监控数据库 SQL1&#xff1a;查找最新的30条告警事件SQL2&#xff1a;获取当前的总报警记录数有哪些SQL语句会导致CPU过高&#xff1f;查看SQL的查询计划 选择top记录时&#xff0c;尽量为order子句的字段建立索引查看SQL语句CPU高的…

通过wifi调试Android程序

原文&#xff1a;http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 1.首先让android手机监听指定的端口&#xff1a;  这一步需要使用shell&#xff0c;因此手机上要有终端模拟器&#xff0c;不过网上很多&#xff0c;随便找个就行了&#xff0c…

基于jQuery的对象切换插件:soChange 1.5 (点击下载)

http://www.jsfoot.com/jquery/demo/2011-09-20/192.html 所有参数&#xff1a; $(obj).soChange({ thumbObj:null, //导航对象&#xff0c;默认为空 botPrev:null, //按钮上一个&#xff0c;默认为空 botNext:null, //按钮下一个。默认为空 thumbNowClass:no…

atitit.Oracle 9 10 11 12新特性attilax总结

atitit.Oracle 9 10 11 12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1. 审计简介 1 1.4. 其他&#xff08;大部分是管理功能&#xff09; 2 2. Oracle 12c 的 12 个新特性 2 2.1. 2 Improved Defaults 增强了DEFAULT, default目前可以直接指代…

mysql读书笔记---mysql safe update mode

You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column 查看 mysql> show variables like %sql_safe%; 关闭 mysql> set sql_safe_updates0; 开启 mysql> set sql_safe_updates1;

基于纤程(Fiber)实现C++异步编程库(一):原理及示例

纤程&#xff08;Fiber&#xff09;和协程&#xff08;coroutine&#xff09;是差不多的概念&#xff0c;也叫做用户级线程或者轻线程之类的。Windows系统提供了一组API用户创建和使用纤程&#xff0c;本文中的库就是基于这组API实现的&#xff0c;所以无法跨平台使用&#xff…

MYSQL读书笔记---运算符、字符串操作

运算符###########################################,!(<>),>,>,<,< is null , is not null, isnull(expr) expr between min and max expr in(v1,v2,...)流程#############################################mysql> select ifnull(1,0); #如果第一个参数为…