Linux系统下⽤find命令查最近修改过的⽂件
Linux的终端上,没有windows的搜索那样好⽤的图形界⾯⼯具,但find命令确是很强⼤的。
⽐如按名字查⼀个⽂件,可以⽤ find / -name targetfilename 。唉,如果只知道名字,不知道地点,这样也不失为⼀个野蛮有效的⽅法。
按时间查也有参数 -atime 访问时间 -ctime 改变状态的时间 -mtime修改的时间。但要注意,这⾥的时间是以24⼩时为单位的。
查看man⼿册后使⽤,你会很迷惑: -mtime n: Files data was last modified n*24 hours ago. 字⾯上的理解是最后⼀次修改发⽣在n个24⼩时以前的⽂件,但实际上
find ./ -mtime 0:返回最近24⼩时内修改过的⽂件。
find ./ -mtime 1 :返回的是前48~24⼩时修改过的⽂件。⽽不是48⼩时以内修改过的⽂件。
那怎么返回10天内修改过的⽂件?find还可以⽀持表达式关系运算,所以可以把最近⼏天的数据⼀天天的加起来:
find ./ -mtime 0 -o -mtime 1 -o -mtime 2 ……虽然⽐较⼟,但也算是个⽅法了。
还有没有更好的⽅法,我也想知道。
另外, -mmin参数-cmin / - amin也是类似的。
Find应⽤实例
查最近30分钟修改的当前⽬录下的.php⽂件
find . -name '*.php' -mmin -30
查最近24⼩时修改的当前⽬录下的.php⽂件
find . -name '*.php' -mtime 0
查最近24⼩时修改的当前⽬录下的.php⽂件,并列出详细信息
find . -name '*.inc' -mtime 0 -ls
查当前⽬录下,最近24-48⼩时修改过的常规⽂件。
find . -type f -mtime 1
查当前⽬录下,最近1天前修改过的常规⽂件。
find . -type f -mtime +1
·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 | xargs rm -rf
====================================================
-name filename #查名为filename的⽂件
-perm #按执⾏权限来查
-user username #按⽂件属主来查
-group groupname #按组来查
-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 -exec ls -l {} \; #查所有⽤户都可读写执⾏的⽂件同-perm 777
$find . -type d -print
$find . ! -type d -print
$find . -type l -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*" -exec grep "cnscn" {} \; #看是否存在cnscn⽤户
$find . -name "yao*" | xargs file
$find . -name "yao*" | xargs echo "" > /tmp/core.log
$find . -name "yao*" | xargs chmod o-w
======================================================
find -name april* 在当前⽬录下查以april开始的⽂件
find -name april* fprint file 在当前⽬录下查以april开始的⽂件,并把结果输出到file中
find -name ap* -o -name may* 查以ap或may开头的⽂件
find /mnt - -ftype vfat 在/mnt下查名称为且⽂件系统类型为vfat的⽂件
find /mnt - ! -ftype vfat 在/mnt下查名称为且⽂件系统类型不为vfat的⽂件
find /tmp -name wa* -type l 在/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 在/home下查更新时间⽐近的⽂件或⽬录
find /home -anewer 在/home下查存取时间⽐近的⽂件或⽬录
find /home -used -2 列出⽂件或⽬录被改动过之后,在2⽇内被存取过的⽂件或⽬录
find /home -user cnscn 列出/home⽬录内属于⽤户cnscn的⽂件或⽬录
find /home -uid +501 列出/home⽬录内⽤户的识别码⼤于501的⽂件或⽬录
find /home -group cnscn 列出/home内组为cnscn的⽂件或⽬录
find /home -gid 501 列出/home内组id为501的⽂件或⽬录
find /home -nouser 列出/home内不属于本地⽤户的⽂件或⽬录
find /home -nogroup 列出/home内不属于本地组的⽂件或⽬录
find /home - -maxdepth 4 列出/home内的 查时深度最多为3层
find /home - -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 - -exec cat {} \;
find /tmp -name -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 . -type f -exec ls -l {} \;
-rw-r–r– 1 root root 34928 2003-02-25 ./f
-rw-r–r– 1 root root 12959 2003-02-25 ./conf/magic
-rw-r–r– 1 root root 180 2003-02-25 ./conf.d/README
查当前⽬录下的所有普通⽂件,并在- e x e c选项中使⽤ls -l命令将它们列出
=================================================
在/ l o g s⽬录中查更改时间在5⽇以前的⽂件并删除它们:
$ find logs -type f -mtime +5 -exec -ok rm {} \;
=================================================
查询当天修改过的⽂件
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} \;
=================================================
查询⽂件并询问是否要显⽰
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? y
-rw-r–r– 1 cnscn cnscn 13709 1⽉ 12 12:22 ./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} \;
< ls … ./classDB.inc.php > ? n
[root@book class]#
=================================================
查询并交给awk去处理
[root@book class]# who | awk ’{print $1"\t"$2}’
cnscn pts/0
=================================================
awk—grep—sed
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ’none’ | sed s"/\/dev\///g"
⽂件系统
sda2
sda1
[root@book class]# 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 grep SYSCALL_VECTOR
B) grep SYSCALL_VECTOR /tmp/*.h | cut -d’:' -f1| uniq > filename
C) find /tmp -name "*.h" -exec grep "SYSCALL_VECTOR" {} \; -print
2)find / -name filename -exec rm -rf {} \;
find / -name filename -ok rm -rf {} \;
3)⽐如要查磁盘中⼤于3M的⽂件:
find . -size +3000k -exec ls -ld {} ;
4)将find出来的东西拷到另⼀个地⽅
find *.c -exec cp ‘{}’ /tmp ‘;’
如果有特殊⽂件,可以⽤cpio,也可以⽤这样的语法:
find dir -name filename -print | cpio -pdv newdir
6)查2004-11-30 16:36:37时更改过的⽂件
# A=`find ./ -name "*php"` | ls -l –full-time $A 2>/dev/null | grep "2004-11-30 16:36:37"
, |
find 实例
四⽉ 18th, 2006
要在/usr/linux中查所有的*.h,并在这些⽂件中查“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的⽂件名,有以下⼏种⽅法实现
find /usr/linux -name "*.h" | xargs -n50 grep SYSCALL_VECTOR
grep SYSCALL_VECTOR /usr/linux/*.h | cut -d’:’ -f1 | uniq > filename
find /usr/linux -name "*.h" -exec grep "SYSCALL_VECTOR" {} \; -print
我⽤find / -name filename| rm -rf,不成功,请问为什么不成功?
find / -name filename -exec rm -rf {} \;
find . -name filename |rm -rf试⼀下{} 表⽰你出来的结果。
\; 则相当于“宪法”,没什么说头,就是这么规定的,在 -exec 后⾯需要⼀个表⽰该命令终结的的符号。可以在 man find 中到答案。
要让rm识别find的结果,如下:
find / -name filename |xargs rm -rf
之所以find . -name filename |rm -rf不通过,是因为rm命令不接受从标准输⼊传过来的指令
查含特定字符串的⽂件
例如查当前⽬录下含有"the string you want find…"字符串的⽂件:
$find . -type f -exec grep “the string you want find…” {} ; -print
从根⽬录开始查tmpfile,⼀旦查到马上删除
find / -name "tmpfile" -exec rm {} \;
find 的perm问题
请问⼀下以下命令什么意思?关键是那个数字前的-,其他都还知道
find -name ".*" -perm -007
我知道
find -name ".*" -perm 755
这个是⽤来查权限位为755的隐藏⽂件
噢,对了还有,我上边的命令都省略了find的pathname参数 find默认是查当前⼯作⽬录的吗?
如果我⽤ -ok 替代 -exec, 那么还需要加上 {} \; 吗?
这个已经清楚,仍然需要,因为 -ok 只是 -exec 的提⽰模式,它只是多了⼀个确认操作的步骤,刚才没有读懂那⼏句E⽂的意思呵呵不好意思-007是指查所有⽤户都可读、写、执⾏的⽂件,要⼩⼼呀~~~
解释解释?
find -name ".*" -perm -007 和 find -name ".*" -perm 777 有区别吗?
-007是怎么来得呢?
不过有⼀个问题
我⽤ find . -perm -100 会列出当前⽬录 . , 这是为什么呢?
下⾯引⽤由explover在 2002/10/01 06:15am 发表的内容:
-007是指查所有⽤户都可读、写、执⾏的⽂件,要⼩⼼呀~~~
-007是查含其它⽤户(不同组,⾮属主)可读,写,执⾏的⽂件.并不⼀定要同组可读写,-是指最少权限为007.
下⾯引⽤由⼀颗⼩⽩菜在 2002/10/01 10:16am 发表的内容:
OK了,呵呵
不过有⼀个问题
我⽤ find . -perm -100 会列出当前⽬录 . , 这是为什么呢?
这种⽅法不会准确的出⽬录的. -100是指权限⾄少是属主可运⾏.
在unix系统下,你可以拥有对⽬录⽂件的执⾏权你才可以进⼊⼀个⽬录.这便是⽬录⽂件被列出的原因.
find . -perm -001 -print到往往是⽬录⽂件.
我的意思当然不是使⽤这种⽅法来⽬录,只不过不明⽩其中的 -100 意义了
那以此类推,是不是 -010是指权限⾄少是owner同组可执⾏的吗?也就是说其实这⾥的010和-是分开的,-表⽰⼀个⾄少的意思,⽽且010才是真正⽤来描述权限位的?
这样⼦就明⽩了谢谢你噢
将find出来的东西拷到另⼀个地⽅?
find *.c -exec cp ‘{}’ /tmp ‘;’
如果有特殊⽂件,可以⽤cpio,也可以⽤这样的语法:
find dir -name filename -print | cpio -pdv newdir
出磁盘中某个⼤⼩范围内的⽂件
⽐如要查磁盘中⼤于3M的⽂件:
find . -size +3000k -exec ls -ld {} ;
如何⽤find查某⼀天更改的⽂件?
可以使⽤这⼀⾏命令来实现:
A=`find ~ -print` | ls -l –full-time $A 2>/dev/null | grep "Jun 27" | grep 1998
使⽤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 "*" -exec judgetime {} \;
注意时间格式为24⼩时制。
thank you ,如果我要精确到分钟呢
touch -t 04241112 starttemp #精确到12分钟
touch -t 04241220 endtemp #截⽌到12点20
find [dir] -newer starttemp -a ! -newer endtemp -exec ls -l {} \;
newer?
那昨天12:10⽂件如何呢?
每天执⾏的时候,⽤当天的⽇期和时间戳替换⼀下不就⾏了吗?
我不知道他是不是把所有的11:00~12:00的都出来,是不是只执⾏⼀次还是每天都执⾏?
这种情况俺猜想是⾃⼰的东西放在哪忘了,只记得当时是深夜了。
有道理!
不愧是斑⽵!
不光知道怎么解决问题,还知道在什么情况下出现这类问题,佩服佩服!
问题⼜出现了。创建这个⽂件的时候。本来应该是时间的⼀栏现在写上了2002,⽽不是12:00.
等到12:00过了吧!
删除指定⽇期的⽂件
find ./ -name ⽂件名 -exec rm -f {} \;
例:删除当前30天内没⽤过的⽂件,⽤如下命令:
find / -atime +30 -exec rm -f {} \;
我⾃⼰试着写了⼀⼩段SHELL,也⽤ll ,grep, rm ⼏个命令,⽤起来还差强⼈意。
对过滤出来的⽂件名列表中⽤了⼀个FOR语句,再执⾏rm 。现在我想把这段SHELL 扩展⼀下让它每天定时运⾏将 n 天前的⽂件删掉,有没有⼈能给我⼀些提⽰,谢谢!
还有个问题,对于前⾯那位朋友提到的"find / -atime +30 -exec rm -f {} \;
"⽅法,我很早就试过⼏次,不过好像都不太对,参数 -atime n 是查n天前被访问过的⽂件,我不明⽩的是这⾥的时间参照点是什么,以及这个n天是怎么计算的。
find查命令的使用问题⼆、对于"ll |cut -f 1" 这个命令我是不是⽤错了,我只想取出 ll 中列出的⽂件名,但⽤cut -f 命令做不到,我只好换⽤ ll |cut -c 59- 这种⽅式得到我要的⽂件名,but it’s a pool idear !我也试过⽤awk ,好像也不对,看看⼤家可不可以给我⼀些⼩⼩的提醒,TKS SO MUCH
问题三、如何改变 I结点的⽇期格式我现在的系统显⽰的格式是:
-rw-r—– 1 msahz01 users 2253 2002年2⽉ 2⽇ poheader.i
我想把这换成
-rw-rw-rw- 1 house users 2193 Apr 19 2001 hkdisp.p
如何才能做到这点?
awk 应该可以
ll | awk ‘{print $9}’
删除多少天之前的⽂件
find /yourpath -mtime +31 -exec rm {} \;
find /yourpath -mtime +366 -exec rm {} \;
find中, -ctime, -mtime及其-atime有何区别
请问 -ctime 和 -mtime 有什么关系 ?
如果⽗⽬录的 ctime 改变, 那它下⾯的⽂件的 ctime 就会⾃动都改了吗 ?
-ctime 和 -mtime ,-atime 这些信息是存在哪⼉呢 ?
我⽤ -mtime -1 到了新建或改的⽂件.
但怎样才能到⼀天内 mv 来的⽂件呢( 它们的时间是原有的时间,早于⼀天 ) ?
⽤-newer选项啊。
你可以先touch⼀个你想要的时间的⽂件如下:
$ touch -t 08190800 test
$ ls -l test
-rw-r–r– 1 dba other 0 Aug 19 08:00 test
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论