linux中查找所有的*.h,并在这些文件中查找SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名,有以下几种方法实现
find/usr/linux-name"*.h"|xargs-n50grepSYSCALL_VECTOR
grepSYSCALL_VECTOR/usr/linux/*.h|cut-d’:’-f1|uniq>filename
find/usr/linux-name"*.h"-execgrep"SYSCALL_VECTOR"{}\;-print 我用find/-namefilename|rm-rf,不成功,请问为什么不成功?
find/-namefilename-execrm-rf{}\;
find.-namefilename|rm-rf试一下{}表示你找出来的结果。
\;则相当于宪法,没什么说头,就是这么规定的,在-exec后面需要一个表示该命令终结的的符号。可以在manfind中找到答案。
要让rm识别find的结果,如下:
find/-namefilename|xargsrm-rf
之所以find.-namefilename|rm-rf不通过,是因为rm命令不接受从标准输入传过来的指令
查找含特定字符串的文件
例如查找当前目录下含有"thestringyouwantfind"字符串的文件:
$find.-typef-execgrepthestringyouwantfind{};-print
从根目录开始查tmpfile,一旦查到马上删除
find/-name"tmpfile"-execrm{}\;
find的perm问题
请问一下以下命令什么意思?关键是那个数字前的-,其他都还知道
find-name".*"-perm-007
我知道
find-name".*"-perm755
这个是用来查找权限位为755的隐藏文件
噢,对了还有,我上边的命令都省略了find的pathname参数find默认是查找当前工作目录的吗?
如果我用-ok替代-exec,那么还需要加上{}\;吗?
这个已经清楚,仍然需要,因为-ok只是-exec的提示模式,它只是多了一个确认操作的步骤,刚才没有读懂那几句E文的意思呵呵不好意思
-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~
解释解释?
find-name".*"-perm-007和find-name".*"-perm777有区别吗?
-007是怎么来得呢?
不过有一个问题
我用find.-perm-100会列出当前目录.,这是为什么呢?
下面引用由explover在2002/10/0106:15am发表的内容:
-007是指查找所有用户都可读、写、执行的文件,要小心呀~~~
-007是查找含其它用户(不同组,非属主)可读,写,执行的文件.并不一定要同组可读写,-是指最少权限为007.
下面引用由一颗小白菜在2002/10/0110:16am发表的内容:
OK了,呵呵
不过有一个问题
我用find.-perm-100会列出当前目录.,这是为什么呢?
这种方法不会准确的找出目录的.-100是指权限至少是属主可运行.
在unix系统下,你可以拥有对目录文件的执行权你才可以进入一个目录.这便是目录文件被列出的原因.
find.-perm-001-print找到往往是目录文件.
我的意思当然不是使用这种方法来找目录,只不过不明白其中的-100意义了
那以此类推,是不是-010是指权限至少是owner同组可执行的吗?也就是说其实这里的010和-是分开的,-表示一个至少的意思,而且010才是真正用来描述权限位的?
这样子就明白了谢谢你噢
将find出来的东西拷到另一个地方?
find*.c-execcp‘{}’/tmp‘;’
如果有特殊文件,可以用cpio,也可以用这样的语法:
finddir-namefilename-print|cpio-pdvnewdir
找出磁盘中某个大小范围内的文件
比如要查找磁盘中大于3M的文件:
find.-size+3000k-execls-ld{};
如何用find查找某一天更改的文件?
可以使用这一行命令来实现:
A=`find~-print`|ls-l–full-time$A2>/dev/null|grep"Jun27"|grep1998
使用find命令查找某个时间段的shell怎么写。比如11点到12点的。thanks
创建一个脚本judgetime,内容如下:
ls-l$*|awk‘{split($8,hour,":");if((hour[1]>23||hour[1]<1)&&hour[1]<24)print}’
到要查找的目录下,运行
find./-name"*"-execjudgetime{}\;
注意时间格式为24小时制。
thankyou,如果我要精确到分钟呢
touch-t04241112starttemp#精确到12分钟
touch-t04241220endtemp#截止到12点20
find[dir]-newerstarttemp-a!-newerendtemp-execls-l{}\;
newer?
那昨天12:10文件如何呢?
每天执行的时候,用当天的日期和时间戳替换一下不就行了吗?
我不知道他是不是把所有的11:00~12:00的都找出来,是不是只执行一次还是每天都执行?
这种情况俺猜想是自己的东西放在哪忘了,只记得当时是深夜了。
有道理!
不愧是斑竹!
不光知道怎么解决问题,还知道在什么情况下出现这类问题,佩服佩服!
问题又出现了。创建这个文件的时候。本来应该是时间的一栏现在写上了2002,而不是12:00.
等到12:00过了吧!
删除指定日期的文件
find./-name文件名-execrm-f{}\;
例:删除当前30天内没用过的文件,用如下命令:
find/-atime+30-execrm-f{}\;
我自己试着写了一小段SHELL,也用ll,grep,rm几个命令,用起来还差强人意。
对过滤出来的文件名列表中用了一个FOR语句,再执行rm。现在我想把这段SHELL扩展一下让它每天定时运行将n天前的文件删掉,有没有人能给我一些提示,谢谢!
还有个问题,对于前面那位朋友提到的"find/-atime+30-execrm-f{}\;
"方法,我很早就试过几次,不过好像都不太对,参数-atimen是查找n天前被访问过的文件,我不明白的是这里的时间参照点是什么,以及这个n天是怎么计算的。
问题二、对于"ll|cut-f1"这个命令我是不是用错了,我只想取出ll中列出的文件名,但用cut-f命令做不到,我只好换用ll|cut-c59-这种方式得到我要的文件名,butit’sapoolidear!我也试过用awk,好像也不对,看看大家可不可以给我一些小小的提醒,TKSSOMUCH
问题三、如何改变I结点的日期格式我现在的系统显示的格式是:
-rw-r—–1msahz01users22532002年2月2日poheader.i
我想把这换成
-rw-rw-rw-1houseusers2193Apr192001hkdisp.p
如何才能做到这点?
awk应该可以
ll|awk‘{print$9}’
删除多少天之前的文件
find/yourpath-mtime+31-execrm{}\;
find/yourpath-mtime+366-execrm{}\;
find中,-ctime,-mtime及其-atime有何区别
请问-ctime和-mtime有什么关系?
如果父目录的ctime改变,那它下面的文件的ctime就会自动都改了吗?
-ctime和-mtime,-atime这些信息是存在哪儿呢?
我用-mtime-1找到了新建或改的文件.
但怎样才能找到一天内mv来的文件呢(它们的时间是原有的时间,早于一天)?
用-newer选项啊。
你可以先touch一个你想要的时间的文件如下:
$touch-t08190800test
$ls-ltest
-rw-r–r–1dbaother0Aug1908:00test
然后
$find.-newertest-print
.
./.sh_history
$ls-l.sh_history
-rw——-1dbaother154Aug2017:39.sh_history
用touch可以写出你想要的任何时间的文件,然后用-newer,!-newer选项即可成功。
1.ctime含inode信息修改的时间.mtime只指文件内容建立或修改的时间.
2不会.
3.这些信息应该是存在文件系统的超级块里.
我查了书-ctime是指inode的改变(或称文件的状态改变).
请问inode存了哪些信息?
做了些小测试,-mtime改,-ctime一定也改.
改文件名,-ctime也会改.
谁能回答i-node存了哪些东西?
vi/usr/include/sys/inode.h
班主,我不能access/usr/include/sys/inode.h.
摘书如下:
Directoriescontaindirectoryentries.Eachentrycontainsafileorsubdirectorynameandanindexnodereferencenumber(i-nodenumber).Toincreasespeedandenhanceuseofdiskspace,thedatainafileisstoredatvariouslocationsinthecomputer’smemory.Thei-nodecontainstheaddressesusedtolocateallthescatteredblocksofdataassociatedwithafile.Thei-nodealsorecordsotherinformationaboutthefileincludingtimeofmodificationandaccess,accessmodes,numberoflinks,fileowner,andfiletype.
可我发现-atime改了,-ctime还没改.why?
(我先cat一个ASCII文件,再用-atime-1有它用-ctime-1居然没有它.)
着岂不跟inode信息改变,ctime就改矛盾吗?
我不同意你贴出来的那段文章,正如我提到的那样,atime,ctime,mtime是放到超级块里,在scounix下是一种叫stat的结构.(stat_32),不同的系统文件系统可能不同.
sco下inode的结构如下:
typedefstructinode
{
structinode*i_forw;/*inodehashchain*/
structinode*i_back;/*‘’*/
structinode*av_forw;/*freelistchain*/
structinode*av_back;/*‘’*/
int*i_fsptr;/*"typeless"pointertofsdependent*/
ino32_ti_number;/*inumber,1-to-1withdevaddress*/
ushorti_ftype;/*filetype=IFDIR,IFREG,etc.*/
shorti_fstyp;/*Filesystemtype*/
off_ti_size;/*sizeoffile*/
ushorti_uid;/*owner*/
ushorti_gid;/*groupofowner*/
ushorti_flag;
ushorti_want;/*i_flagextensiontoavoidMPraces*/
ushorti_count;/*referencecount*/
shorti_nlink;/*directoryentries*/
dev_ti_rdev;/*Rawdevicenumber*/
#definei_namtypei_rdev/*i_ftype==IFNAMsubtype*/
dev_ti_dev;/*devicewhereinoderesides*/
structmount*i_mton;/*ptrtomounttableentrythat*/
/*thisdirectoryismountedon*/
structregion*i_rp;/*ptrtosharedregionifany*/
structstdata*i_sp;/*ptrtoassociatedstream*/
structiisem*isem;/*ptrtoXENIXsemaphores*/
structiisd*isd;/*ptrtoXENIXshareddata*/
}i_un;
#definei_mntoni_un.i_mton/*i_ftype==IFDIRIMOUNT*/
#definei_rptri_un.i_rp/*i_ftype==IFREG||i_ftype==IFBLK*/
#definei_sptri_un.i_sp/*i_ftype==IFCHR||i_ftype==IFIFO*/
#definei_semi_un.isem/*i_ftype==IFNAM&&i_namtype==IFSEM*/
#definei_sdi_un.isd/*i_ftype==IFNAM&&i_namtype==IFSHD*/
structfstypsw*i_fstypp;/*ptrtofilesystemswitchFSPTR*/
long*i_filocks;/*pointertofilock(structure)list*/
unsignedlongi_mappages;/*numberofpagescurrentlycached*/
unsignedlongi_vcode;/*read-aheadblocksave(NFS)*/
shorti_wcnt;/*writeopencountorITEXTcount*/
structlockbi_cilock;/*tastosynchronizei_flagchanges*/
ushorti_rdlocks;/*countofnon-exclusivelockers*/
}inode_t;
所以,访问一个文件不能改变inode信息.
使用chown,chgrp,chmod命令可以很好的比较mtime和ctime
chown改变一个文件的属主,用ctime可以找到,用mtime便找不到.
试试看.
多谢斑竹!我是在Solaris上面试的.我是对-ctime不明白.
试的结果如下:
修改文件,-mtime改了,-ctime也会改.
访问文件,-atime改了,-ctime没变.
chown,chgrp,chmod,mv,都会使-ctime改变,但不影响-atime和-mtime.
touch可以改-mtimeand/or-atime,但touch-a只改访问时间时,-ctime也改了.
touch-m改修改时间时,-ctime当然也改了.
好象还有别的很多东西可以令-ctime改变,搞不清楚.
有什么方法可以显示-mtime,atime,ctime吗?
可以用-ctime来实现对目录的增量文件进行备份或transfer吗?
多谢!
没有什么工具显示,(可能是俺不知道)
把下面程序里的st_mtime换成st_ctime,或st_atime便可以得到你要的了.
#include
int
main(intargc,char**argv)
{
structstatbuf;
chardate[80];
charfname[80];
printf("Enterfilename(withfullpath)tocheckmtime:");
scanf("%s",fname);
stat(fname,&buf);
printf("mtime(insec)of%s=%ld\n",fname,buf.st_mtime);
strcpy(date,ctime((time_t*)&(buf.st_mtime)));
printf("mtime(indate)of%s=%s\n",fname,date);
}
至于文件备份,有什么不可以的么?
mtimels-l最近修改文件内容的时间
atimels-lu最近访问文件的时间
ctimels-li最近文件有所改变的状态,如文件修改,属性\属主改变,节点,链接变化等,应该是不拘泥只是时间前后的改变
俺看了ls的帮助,以为只是按ctime或atime排序,显示的时间还是mtime.
仔细比较了一下,ayhan说的是对的.谢谢ayhan.
多谢ahyan提示!我在Solaris上试过如下:
mtime用ls-l看到
atime用ls-lu看到
ctime用ls-lc看到.(ls-li只有inodenumber)
摘书如下:
-cUsestimeoflastmodificationofthei-node(file
created,modechanged,andsoforth)forsorting(-t)
orprinting(-lor-n).
-uUsestimeoflastaccessinsteadoflastmodification
forsorting(withthe-toption)orprinting(withthe
-loption).
-iForeachfile,printsthei-nodenumberinthefirst
columnofthereport.
A)find/tmp-name"*.h"|xargs-n50grepSYSCALL_VECTOR
B)grepSYSCALL_VECTOR/tmp/*.h|cut-d’:'-f1|uniq>filename
C)find/tmp-name"*.h"-execgrep"SYSCALL_VECTOR"{}\;-print
2)find/-namefilename-execrm-rf{}\;
find/-namefilename-okrm-rf{}\;
3)比如要查找磁盘中大于3M的文件:
find.-size+3000k-execls-ld{};
4)将find出来的东西拷到另一个地方
find*.c-execcp‘{}’/tmp‘;’
如果有特殊文件,可以用cpio,也可以用这样的语法:
finddir-namefilename-print|cpio-pdvnewdir
6)查找2004-11-3016:36:37时更改过的文件
#A=`find./-name"*php"`|ls-l–full-time$A2>/dev/null|grep"2004-11-3016:36:37"
=================================================
在/logs目录中查找更改时间在5日以前的文件并删除它们:
$findlogs-typef-mtime+5-exec-okrm{}\;
=================================================
查询当天修改过的文件
[root@bookclass]#find./-mtime-1-typef-execls-l{}\;
=================================================
查询文件并询问是否要显示
[root@bookclass]#find./-mtime-1-typef-okls-l{}\;
<ls./classDB.inc.php>?y
-rw-r–r–1cnscncnscn137091月1212:22./classDB.inc.php
[root@bookclass]#find./-mtime-1-typef-okls-l{}\;
<ls./classDB.inc.php>?n
[root@bookclass]#
=================================================
查询并交给awk去处理
[root@bookclass]#who|awk’{print$1"\t"$2}’
cnscnpts/0
=================================================
awk—grep—sed
[root@bookclass]#df-k|awk‘{print$1}’|grep-v’none’|seds"/\/dev\///g"
文件系统
sda2
sda1
[root@bookclass]#df-k|awk‘{print$1}’|grep-v’none’
文件系统
/dev/sda2
/dev/sda1