每日一个linux命令17-find之查询篇01

1. 命令解析

命令用途
在文件系统中查找文件,该命令功能强大,参数较多;在较大容量的目录中查找时,find命令会执行较长的时间,建议在后台执行此类命令。

命令格式

find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

默认目录是当前目录,默认的表达式是-print,默认的逻辑运算符是-a(AND),表达式的类型有:operators, options, tests, 和 actions

命令参数

operators (decreasing precedence; -and is implicit where no others are given):
( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2
EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2

positional options (always true): -daystart -follow -regextype
normal options (always true, specified before other expressions):
-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
--version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race

tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N
-cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME
-ilname PATTERN -iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
-links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE
-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN
-readable -writable -executable
-wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
-used N -user NAME -xtype [bcdpfls]
-context CONTEXT

actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;

常用参数

符号解析:+N表示大于N,-N表示小于N,N表示等于N


-mtime ±N 按文件的更新时间来查找,+N表示N天以外的,-N表示N天以内的,如file1是前天修改的,则通过(+1或-2)可找到;file2是昨天修改的,则通过-1可找到。

2. 示例

2.1 在当前目录按照文件名精确查找文件 -name

[root@test test]# find . -name history.log
./lessTest/history.log

2.1 在当前目录按照文件名使用通配符查找文件 -name

[root@test test]# find . -name *.log
./lessTest/history.log
./headTest/hisotry.log
./headTest/ping.log

2.2 按类型来查找目录 -type

[root@test test]# find . -type d
.
./catTest
./nlTest
./lessTest
./headTest
./moreTest
[root@test test]# find . -type d -name 'less*'
./lessTest
[root@test test]# find . -type f -name '*.log'
./lessTest/history.log
./headTest/hisotry.log
./headTest/ping.log

2.3 按大小来查找 -c

[root@test test]# find . -size +100k -type f 
./lessTest/history.log
./lessTest/Kconfig
./headTest/hisotry.log
./headTest/ping.log
./moreTest/Kconfig
[root@test test]# find -type f -size -2M  #小于2M的
./catTest/f3
./catTest/f4
./catTest/f1
./findTest/F1
./findTest/f3
./findTest/f4
./findTest/F2
./findTest/f2
./findTest/F3
./findTest/f1
./findTest/2rd/F1
./findTest/2rd/f3
./findTest/2rd/f4
./findTest/2rd/3rd/f1
./findTest/2rd/F2
./findTest/2rd/f2
./findTest/2rd/F3
./findTest/2rd/f1
./nlTest/f1
./lessTest/history.log
./lessTest/Kconfig
./headTest/hisotry.log
./moreTest/Kconfig
./moreTest/f1
[root@test test]# find -type f -size +2M #大于2M的
./headTest/ping.log
[root@test test]# find -type f -size 2M #等于2M的

2.3 按访问时间查找 -mtime

[root@test test]# find . `-atime ±N`
.
./catTest
./nlTest
./lessTest
./lessTest/history.log
./headTest
./moreTest

2.4 按修改时间查找N天内外的 -mtime ±N

[root@test findTest]# find . -mtime -1
.
./f3
./f2
./f1
[root@test findTest]# stat .
  File: ‘.’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: fd01h/64769d    Inode: 265923      Links: 2
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-22 16:44:21.155000000 +0800
Modify: 2017-04-22 16:43:58.108000000 +0800
Change: 2017-04-22 16:43:58.108000000 +0800
 Birth: -
[root@test findTest]# find . -mtime -1
.
./f3
./f2
./f1
[root@test findTest]# find . -mtime +1
[root@test findTest]# find . -mtime -2
.
./f3
./f2
./f1
[root@test findTest]# find . -mtime -1
.
./f3
./f2
./f1
[root@test findTest]# touch -t201701011112.13 f1
[root@test findTest]# stat f1
  File: ‘f1’
  Size: 3           Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 265924      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-01-01 11:12:13.000000000 +0800
Modify: 2017-01-01 11:12:13.000000000 +0800
Change: 2017-04-22 18:45:27.476000000 +0800
 Birth: -
[root@test findTest]# find . -mtime -1
.
./f3
./f2

2.5 查找比某个文件更新的 -newer

[root@test findTest]# touch f4
[root@test findTest]# ls
f1  f2  f3  f4
[root@test findTest]# find . -newer f2
.
./f4
[root@test findTest]# find . -newer f1
.
./f3
./f4
./f2

2.6 查找N分钟内外的 -mmin ±N

[root@test findTest]# find . -mmin -50
.
./f4
[root@test findTest]# find . -mmin +50
./f3
./f2
./f1
[root@test findTest]# stat f4
  File: ‘f4’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd01h/64769d    Inode: 265927      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-22 18:47:49.010000000 +0800
Modify: 2017-04-22 18:47:49.010000000 +0800
Change: 2017-04-22 18:47:49.010000000 +0800

2.7 组合逻辑运算OR -o

[root@test test]# find findTest -mmin -60
findTest
findTest/f4
[root@test test]# find findTest -mmin +60
findTest/f3
findTest/f2
findTest/f1
[root@test test]# find findTest -mmin +60 -o -mmin -60
findTest
findTest/f3
findTest/f4
findTest/f2
findTest/f1

2.8 组合逻辑运算 NOT -not

[root@test test]# find findTest -not -mmin -70
findTest/f3
findTest/f2
findTest/f1
[root@test test]# find findTest  -mmin -70
findTest
findTest/f4

2.9 组合逻辑运算 AND -a

[root@test test]# find findTest  -name 'f*' 
findTest
findTest/f3
findTest/f4
findTest/f2
findTest/f1
[root@test test]# find findTest  -name 'f*' -a -mmin -70
findTest
findTest/f4

2.10 搜索时采用深度优先的策略(先子目录在根目录) -depth

[root@test 2rd]# find ./3rd 
./3rd
./3rd/f1
[root@test 2rd]# find ./3rd -depth
./3rd/f1
./3rd

2.11 忽略某个文件的内容 -prune

[root@test test]# find ./findTest
./findTest
./findTest/test.sh
./findTest/F1
./findTest/f3
./findTest/f4
./findTest/2rd/F1
./findTest/2rd/f3
./findTest/2rd/f4
[root@test test]# find ./findTest -path './findTest/2rd' -prune -o -print
./findTest
./findTest/test.sh
./findTest/F1
./findTest/f3
./findTest/f4
[root@test test]# find . -depth -path "./findTest" -prune -o -print
./catTest/f3
./catTest/f4
./catTest/f1
./catTest
./findTest/test.sh
./findTest/F1
./findTest/f3
./findTest/f4
./findTest/2rd/F1
./findTest/2rd/f3
./findTest/2rd/f4
...省略...

PS:如果参数中同时又-depth,则-prune会失效

find [-path ..] [expression]
在路径列表的后面的是表达式
-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果
-path "test" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "test" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。
这个表达式组合特例可以用伪码写为:
if -path "test" then
-prune
else
-print

2.12 忽略多个文件夹

[root@test test]# find .
.
./catTest
./catTest/f3
./findTest
./findTest/F1
./findTest/2rd
./findTest/2rd/F1
./findTest/2rd/f3
./nlTest
./nlTest/f1
./lessTest
./lessTest/history.log
./lessTest/Kconfig
./headTest
[root@test test]# find . \( -path ./findTest -o -path ./catTest \) -a  -prune -o -print
.
./nlTest
./nlTest/f1
./lessTest
./lessTest/history.log
./lessTest/Kconfig
./headTest
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容