仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1540|回复: 8
打印 上一主题 下一主题

[shell编程] 带来一篇CentOS Shell经常使用技能 find xargs

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!文件查找下令find:

上面给出find下令的次要使用示例:
/>ls-l#列出以后目次下所包括的测试文件
-rw-r--r--.1rootroot48217Nov1200:57install.log
-rw-r--r--.1rootroot37Nov1200:56testfile.dat
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1rootroot183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2

1.按文件名查找
-name:查找时文件名巨细写敏感。
-iname:查找时文件名巨细写不敏感。
#该下令为find下令中最为经常使用的下令,即从以后目次中查找扩大名为.log的文件。必要申明的是,缺省情形下,find会从指定的目次搜刮,并递回的搜刮其子目次。
/>find.-name"*.log"
./install.log
/>find.-inameU*#假如实行find.-nameU*将不会找到婚配的文件
usersusers2

2.按文件工夫属性查找:
-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天以内创立的文件
.
./users2
./install.log
./testfile.dat
./users
./test.tar.bz2
/>find-ctime+2#找出距此时2天之前创立的文件
没有找到#由于以后目次下一切文件都是2天以内创立的
/>touchinstall.log#手工更新install.log的最初会见工夫,以便上面的find下令能够找出该文件
/>find.-cmin-3#找出修正形态工夫在3分钟以内的文件。
install.log

3.基于找到的文件实行指定的操纵:
-exec:对婚配的文件实行该参数所给出的shell下令。响应下令的情势为command{};,注重{}和;之间的空格,同时两个{}之间没有空格
-ok:其次要功效和语法格局与-exec完整不异,独一的不同是在于该选项加倍宁静,由于它会在每次实行shell下令之前均予以提醒,只要在回覆为y的时分,厥后的shell下令才会被持续实行。必要申明的是,该选项不合用于主动化剧本,由于该供应大概会挂起全部主动化流程。
#找出距此时2天以内创立的文件,同时基于find的了局,使用-exec以后的下令,即ls-l,从而能够间接显现出find找到文件的分明列表。
/>find.-ctime-2-execls-l{};
-rw-r--r--.1rootroot279Nov1108:45./users2
-rw-r--r--.1rootroot48217Nov1200:57./install.log
-rw-r--r--.1rootroot37Nov1200:56./testfile.dat
-rw-r--r--.1rootroot183Nov1108:02./users
-rw-r--r--.1rootroot10530Nov1123:08./test.tar.bz2
#找到文件名为*.log,同时文件数据修正工夫距此时为1天以内的文件。假如找到就删除他们。有的时分,如许的写法因为是在找到以后立即删除,因而存在必定误删除的伤害。
/>ls
install.logtestfile.dattest.tar.bz2usersusers2
/>find.-name"*.log"-mtime-1-execrm-f{};
/>ls
testfile.dattest.tar.bz2usersusers2
在把持台下,为了使下面的下令加倍宁静,我们可使用-ok交换-exec,见以下示例:
/>find.-name"*.dat"-mtime-1-okrm-f{};
<rm..../testfile.dat>?y#关于该提醒,假如回覆y,找到的*.dat文件将被删除,这一点从上面的ls下令的了局能够看出。
/>ls
test.tar.bz2usersusers2

4.按文件所属的owner和group查找:
-user:查找owner属于-user选项前面指定用户的文件。
!-user:查找owner不属于-user选项前面指定用户的文件。
-group:
查找group属于-group选项前面指定组的文件。
!-group:查找group不属于-group选项前面指定组的文件。
/>ls-l#上面三个文件的owner均为root
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1rootroot183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
/>chownstephenusers#将users文件的owner从root改成stephen。
/>ls-l
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1stephenroot183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
/>find.-userroot#搜刮owner是root的文件
.
./users2
./test.tar.bz2
/>find.!-userroot#搜刮owner不是root的文件,注重!和-user之间要有空格。
./users
/>ls-l#上面三个文件的所属组均为root
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1stephenroot183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
/>chgrpstephenusers#将users文件的所属组从root改成stephen
/>ls-l
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1stephenstephen183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
/>find.-grouproot#搜刮所属组是root的文件
.
./users2
./test.tar.bz2
/>find.!-grouproot#搜刮所属组不是root的文件,注重!和-user之间要有空格。
./users

5.按指定目次深度查找:
-maxdepth:前面的参数暗示距以后目次指定的深度,个中1暗示以后目次,2暗示一级子目次,以此类推。在指定该选项后,find只是在找到指定深度后就不在递回其子目次了。下例中的深度为1,暗示只是在以后子目次中搜刮。假如没有设置该选项,find将递回以后目次下的一切子目次。
/>mkdirsubdir#创立一个子目次,并在该子目次内创立一个文件
/>cdsubdir
/>touchtestfile
/>cd..
#maxdepth前面的参数暗示距以后目次指定的深度,个中1暗示以后目次,2暗示一级子目次,以此类推。在指定该选项后,find只是在找到指定深度后就不在递回其子目次了。下例中的深度为1,暗示只是在以后子目次中搜刮。假如没有设置该选项,find将递回以后目次下的一切子目次。
/>find.-maxdepth1-name"*"
.
./users2
./subdir
./users
./test.tar.bz2
#搜刮深度为子一级子目次,这里能够看出子目次下方才创立的testfile已被找到
/>find.-maxdepth2-name"*"
.
./users2
./subdir
./subdir/testfile
./users
./test.tar.bz2

6.扫除指定子目次查找:
-pathpathname-prune:避开指定子目次pathname查找。
-pathexpression-prune:避开表达中指定的一组pathname查找。
必要申明的是,假如同时利用-depth选项,那末-prune将被find下令疏忽。
#为前面的示例创立必要避开的和不必要避开的子目次,并在这些子目次内均创立切合查找划定规矩的文件。
/>mkdirDontSearchPath

/>cdDontSearchPath
/>touchdatafile1
/>cd..
/>mkdirDoSearchPath
/>cdDoSearchPath
/>touchdatafile2
/>cd..
/>touchdatafile3
#以后目次下,避开DontSearchPath子目次,搜刮一切文件名为datafile*的文件。
/>find.-path"./DontSearchPath"-prune-o-name"datafile*"-print
./DoSearchPath/datafile2
./datafile3
#以后目次下,同时避开DontSearchPath和DoSearchPath两个子目次,搜刮一切文件名为datafile*的文件。
/>find.(-path"./DontSearchPath"-o-path"./DoSearchPath")-prune-o-name"datafile*"-print
./datafile3

7.按文件权限属性查找:
-permmode:文件权限恰好切合mode(mode为文件权限的八进制暗示)。
-perm+mode:文件权限局部切合mode。如下令参数为644(-rw-r--r--),那末只需文件权限属性中有任何权限和644堆叠,如许的文件都可以被选出。
-perm-mode:文件权限完整切合mode。如下令参数为644(-rw-r--r--),当644中指定的权限已被以后文件完整具有,同时该文件还具有分外的权限属性,如许的文件可被选出。
/>ls-l
-rw-r--r--.1rootroot0Nov1210:02datafile3
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1stephenstephen183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
/>find.-perm644#查找一切文件权限恰好为644(-rw-r--r--)的文件。
./users2
./datafile3
./users
./test.tar.bz2
/>find.-perm444#以后目次下没有文件的权限属于即是444(均为644)。
/>find.-perm-444#644所包括的权限完整掩盖444所暗示的权限。
.
./users2
./datafile3
./users
./test.tar.bz2
/>find.-perm+111#查找一切可实行的文件,该下令没有找就任何文件。
/>chmodu+xusers#改动users文件的权限,增加owner的可实行权限,以便于上面的下令能够将其找出。
/>find.-perm+111
.
./users

8.按文件范例查找:
-type:前面指定文件的范例。
b-块装备文件。
d-目次。
c-字符装备文件。
p-管道文件。
l-标记链接文件。
f-一般文件。
/>mkdirsubdir
/>find.-typed#在以后目次下,找出文件范例为目次的文件。
./subdir
 />find.!-typed#在以后目次下,找出文件范例不为目次的文件。
./users2
./datafile3
./users
./test.tar.bz2
/>find.-typef#在以后目次下,找出文件范例为文件的文件
./users2
./datafile3
./users
./test.tar.bz2

9.按文件巨细查找:
-size[+/-]100[c/k/M/G]:暗示文件的长度为即是[年夜于/小于]100块[字节/k/M/G]的文件。
-empty:查找空文件。
/>find.-size+4k-execls-l{};#查找文件巨细年夜于4k的文件,同时打印出找到文件的明细
-rw-r--r--.1rootroot10530Nov1123:08./test.tar.bz2
/>find.-size-4k-execls-l{};#查找文件巨细小于4k的文件。
-rw-r--r--.1rootroot279Nov1108:45./users2
-rw-r--r--.1rootroot0Nov1210:02./datafile3
-rwxr--r--.1stephenstephen183Nov1108:02./users
/>find.-size183c-execls-l{};#查找文件巨细即是183字节的文件。
-rwxr--r--.1stephenstephen183Nov1108:02./users
/>find.-empty-typef-execls-l{};
-rw-r--r--.1rootroot0Nov1210:02./datafile3

10.按变动工夫比指定文件新或比文件旧的体例查找:
-newerfile1!file2:查找文件的变动日期比file1新,可是比file2老的文件。
/>ls-lrt#以工夫按次(从早到晚)列出以后目次下一切文件的明细列表,以供前面的例子参考。
-rwxr--r--.1stephenstephen183Nov1108:02users1
-rw-r--r--.1rootroot279Nov1108:45users2
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1rootroot0Nov1210:02datafile3
/>find.-newerusers1#查找文件变动日期比users1新的文件,从下面了局能够看出,其他文件均切合请求。
./users2
./datafile3
./test.tar.bz2
/>find.!-newerusers2#查找文件变动日期不比users1新的文件。
./users2
./users
#查找文件变动日期比users2新,可是不比test.tar.bz2新的文件。
/>find.-newerusers2!-newertest.tar.bz2
./test.tar.bz2


十七.xargs下令:

该下令的次要功效是从输出中构建和实行shell下令。
在利用find下令的-exec选项处置婚配到的文件时,find下令将一切婚配到的文件一同传送给exec实行。但有些体系对可以传送给exec的下令长度无限制,如许在find下令运转几分钟以后,就会呈现溢堕落误。毛病信息一般是“参数列太长”或“参数列溢出”。这就是xargs下令的用途地点,出格是与find下令一同利用。
find下令把婚配到的文件传送给xargs下令,而xargs下令每次只猎取一局部文件而不是全体,不像-exec选项那样。如许它能够先处置开始猎取的一局部文件,然后是下一批,并云云持续下往。
在有些体系中,利用-exec选项会为处置每个婚配到的文件而倡议一个响应的历程,并不是将婚配到的文件全体作为参数一次实行;如许在有些情形下就会呈现历程过量,体系功能下落的成绩,因此效力不高;
而利用xargs下令则只要一个历程。别的,在利用xargs下令时,事实是一次猎取一切的参数,仍是分批获得参数,和每次猎取参数的数量城市依据该下令的选项及体系内核中响应的可调参数来断定。
/>ls-l
-rw-r--r--.1rootroot0Nov1210:02datafile3
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rwxr--r--.1rootroot183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
#查找以后目次下的每个一般文件,然后利用xargs下令来测试它们分离属于哪类文件。
/>find.-typef-print|xargsfile
./users2:ASCIItext
./datafile3:empty
./users:ASCIItext
./test.tar.bz2:bzip2compresseddata,blocksize=900k
#接纳以后目次下一切一般文件的实行权限。
/>find.-typef-print|xargschmoda-x
/>ls-l
-rw-r--r--.1rootroot0Nov1210:02datafile3
-rw-r--r--.1rootroot10530Nov1123:08test.tar.bz2
-rw-r--r--.1rootroot183Nov1108:02users
-rw-r--r--.1rootroot279Nov1108:45users2
#在劈面目次下查找一切一般文件,并用grep下令在搜刮到的文件中查找hostname这个词
/>find.-typef-print|xargsgrep"hostname"
#在全部体系中查找内存信息转储文件(coredump),然后把了局保留到/tmp/core.log文件中。
/>find/-name"core"-print|xargsecho"">/tmp/core.log 
/>pgrepmysql|xargskill-9  #间接杀失落mysql的历程
[1]+Killedmysql
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!
爱飞 该用户已被删除
沙发
发表于 2015-1-15 22:51:25 | 只看该作者

带来一篇CentOS Shell经常使用技能 find xargs

Linux的成功就在于用最少的资源最短的时间实现了所有功能,这也是符合人类进化的,相信以后节能问题会日益突出。
小魔女 该用户已被删除
板凳
发表于 2015-1-20 20:52:03 | 只看该作者
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
飘飘悠悠 该用户已被删除
地板
发表于 2015-1-30 05:03:27 | 只看该作者
清楚了解网络的基础知识,特别是在Linux下应用知识,如接入internet等等。
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-6 10:00:15 | 只看该作者
对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。
金色的骷髅 该用户已被删除
6#
发表于 2015-2-15 23:50:39 | 只看该作者
学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
透明 该用户已被删除
7#
发表于 2015-3-4 21:13:00 | 只看该作者
在系统检测不到与Linux兼容的显卡,那么此次安装就可能不支持图形化界面安装,而只能用文本模式安装等等。
只想知道 该用户已被删除
8#
发表于 2015-3-11 21:15:17 | 只看该作者
其次,Linux简单易学,因为我们初学者只是学的基础部分,Linux的结构体系非常清晰,再加上老师循序渐进的教学以及耐心的讲解,使我们理解起来很快,短期内就基本掌握了操作和运行模式。
若天明 该用户已被删除
9#
发表于 2015-3-30 00:34:41 | 只看该作者
我感觉linux的学习,学习编程~!~!就去学习C语言编程!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-29 02:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表