Linux find 用法示例.docx
《Linux find 用法示例.docx》由会员分享,可在线阅读,更多相关《Linux find 用法示例.docx(14页珍藏版)》请在冰点文库上搜索。
Linuxfind用法示例
Linux中find常见用法示例
·find path -option [ -print] [-exec -ok command] {}\;
find命令的参数;
pathname:
find命令所查找的目录路径。
例如用.来表示当前目录,用/来表示系统根目录。
-print:
find命令将匹配的文件输出到标准输出。
-exec:
find命令对匹配的文件执行该参数所给出的shell命令。
相应命令的形式为'command'{}\;,注意{}和\;之间的空格。
-ok:
和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
#-print将查找到的文件输出到标准输出
#-exec command {}\; —–将查到的文件执行command操作,{}和\;之间有空格
#-ok和-exec相同,只不过在操作前要询用户
例:
find.-name.svn|xargsrm-rf
====================================================
-name filename #查找名为filename的文件
-perm #按执行权限来查找
-user username #按文件属主来查找
-groupgroupname #按组来查找
-mtime -n+n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n+n #按文件访问时间来查GIN:
0px">
-ctime -n+n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1!
f2 找文件,-n指n天以内,+n指n天以前
-ctime -n+n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-newer f1!
f2 #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查更改时间比f1新但比f2旧的文件
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-depth #使查找在进入子目录前先行查找完本目录
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
-prune #忽略某个目录
=====================================================
$find ~ -name "*.txt" -print #在$HOME中查.txt文件并显示
$find . -name "*.txt" -print
$find . -name "[A-Z]*" -print #查以大写字母开头的文件
$find /etc -name "host*" -print#查以host开头的文件
$find . -name "[a-z][a-z][0–9][0–9].txt" -print #查以两个小写字母和两个数字开头的txt文件
$find. -perm 755 -print
$find . -perm-007 -execls-l{}\; #查所有用户都可读写执行的文件同-perm777
$find .-typed -print
$find . !
-type d -print
$find . -typel -print
$find . -size +1000000c -print #查长度大于1Mb的文件
$find . -size 100c -print #查长度为100c的文件
$find . -size +10 -print #查长度超过期作废10块的文件(1块=512字节)
$cd/
$find etc home apps -depth -print |cpio -ivcdC65536 -o /dev/rmt0
$find /etc-name"passwd*" -execgrep "cnscn" {} \; #看是否存在cnscn用户
$find.-name"yao*" |xargsfile
$find .-name"yao*" | xargs echo "">/tmp/core.log
$find .-name"yao*" |xargs chmod o-w
======================================================
find -nameapril* 在当前目录下查找以april开始的文件
find -name april* fprintfile 在当前目录下查找以april开始的文件,并把结果输出到file中
find -nameap*-o-namemay* 查找以ap或may开头的文件
find /mnt -nametom.txt -ftypevfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -namet.txt!
-ftypevfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -namewa*-typel 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find/home -atime-1 查1天之内被存取过的文件
find/home-mmin +60 在/home下查60分钟前改动过的文件
find/home -amin +30 查最近30分钟前被存取过的文件
find/home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
find/home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -usercnscn 列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn 列出/home内组为cnscn的文件或目录
find /home -gid501 列出/home内组id为501的文件或目录
find /home -nouser 列出/home内不属于本地用户的文件或目录
find /home -nogroup 列出/home内不属于本地组的文件或目录
find /home -nametmp.txt -maxdepth 4 列出/home内的tmp.txt查时深度最多为3层
find /home -nametmp.txt -mindepth 3 从第2层开始查
find /home -empty 查找大小为0的文件或空目录
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find /tmp -nametmp.txt -execcat{}\;
find /tmp -name tmp.txt -ok rm{}\;
find / -amin -10 #查找在系统中最后10分钟访问的文件
find / -atime -2 #查找在系统中最后48小时访问的文件
find / -empty #查找在系统中为空的文件或者文件夹
find / -group cat #查找在系统中属于groupcat的文件
find / -mmin -5 #查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
查当前目录下的所有普通文件
#find.-typef-execls-l{}\;
-rw-r–r– 1root root 349282003-02-25 ./conf/httpd.conf
-rw-r–r– 1root root 129592003-02-25 ./conf/magic
-rw-r–r– 1root root 1802003-02-25 ./conf.d/README
查当前目录下的所有普通文件,并在-exec选项中使用ls-l命令将它们列出
=================================================
在/logs目录中查找更改时间在5日以前的文件并删除它们:
$findlogs-typef-mtime+5-exec -ok rm{}\;
=================================================
查询当天修改过的文件
[root@bookclass]#find ./ -mtime -1 -typef -exec ls-l {}\;
=================================================
查询文件并询问是否要显示
[root@bookclass]#find ./ -mtime -1 -typef -ok ls-l {}\;
?
y
-rw-r–r– 1cnscn cnscn 13709 1月1212:
22./classDB.inc.php
[root@bookclass]#find ./ -mtime -1 -typef -ok ls-l {}\;
?
n
[root@bookclass]#
=================================================
查询并交给awk去处理
[root@bookclass]#who | awk ’{print$1"\t"$2}’
cnscn pts/0
=================================================
awk—grep—sed
[root@bookclass]#df -k| awk‘{print$1}’| grep -v ’none’| sed s"/\/dev\///g"
文件系统
sda2
sda1
[root@bookclass]#df -k| awk‘{print$1}’| grep -v ’none’
文件系统
/dev/sda2
/dev/sda1
1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名
A)find /tmp -name "*.h" |xargs -n50 grepSYSCALL_VECTOR
B)grep SYSCALL_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"
Linux-all, Linux | NoComments»
find实例
四月18th,2006
要在/usr/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-execgrep“thestringyouwantfind…”{};-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