文本查找find

功能:文件查找。命令原型

                                     find  [path]   option  [expression];

      default path is thecurrent directory; default expression is -print.

        path是find命令所查找的目录路径。忽略该参数,find就在当前工作目录及其子目录下递归进行搜索;如果有path参数,就在指定目录及其子目录下递归查找; .指当前目录,.. 指父目录

      -print:find命令将匹配的文件输出到标准输出

常用的选项option

-name filename_str

         查找名为filename_str的文件,选项–name的参数指定了文件名所必须匹配的字符串。我们可以将通配符作为参数使用,如*.txt能够匹配所有以.txt 结尾的文件名,?.txt能够匹配所有以txt结尾的文件且文件名只有一个字符。

如果想匹配多个条件中的一个,可以采用或条件(-o)操作。如

[root@localhostfindtest]# ll -a

total40

drwxr-xr-x   3 root  root  4096 Jul 11 17:31 .

dr-xr-x---.16 root   root  4096 Jul 11 17:31 ..

-rw-r--r--   1 root  root    48 Feb 25 16:25 dump.rdb

-rw-r--r--   1 root  root 16253 May 17 14:03 ISBN-9787511415073.pdf

-rw-r--r--   1 root  root   225 Jul 11 17:28logincook.txt

drwxr-xr-x   2 root  root  4096 Mar 22 11:32 testredis

-rw-r--r--   1 apache root    58 May 6 17:43 test.txt

[root@localhostfindtest]# ll testredis/ -a

total24

drwxr-xr-x2 root root 4096 Mar 22 11:32 .

drwxr-xr-x3 root root 4096 Jul 11 17:31 ..

-rw-r--r--1 root root  623 Apr 15 11:02appendonly.aof

-rw-r--r--1 root root   41 Mar 22 11:32 dump.rdb

-rw-r--r--1 root root  441 Mar  4 10:32 test1.txt

-rw-r--r--1 root root  441 Mar  4 10:34 test2.txt

[root@localhostfindtest]#

 

        如果我们想打印出所有的testX.txt 和.pdf 文件,可以使用如下命令,

[root@localhostfindtest]# find . \( -name "test?.txt" -o -name "*.pdf" \)

./ISBN-9787511415073.pdf

./testredis/test1.txt

./testredis/test2.txt

         \(以及\)用于将 -name "test?.txt" -o -name "*.sh"视为一个整体。可以看出find命令会返回相对于指定搜索路径下符合条件的文档。

        有通配符的参数,一般需要加上单引号或双引号,尤其是通配符出现在首字母位置上时。

[root@localhostfindtest]# find . -name *.txt

find:paths must precede expression: test.txt

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

[root@localhostfindtest]#

           如果不加引号或对*进行转义,上述代码等价于

[root@localhostfindtest]# find . -name test.txt logincook.txt ./testredis/test2.txt ./testredis/test1.txt

find:paths must precede expression: test.sh

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

         find命令有一个选项 -iname(忽略字母大小写),该选项的作用和  -name类似,只不过在匹配名字时会忽略大小写。

还可以用“!”放在-name前表示查找不匹配指定name的文件。

[root@localhostfindtest]# find . \( -name "test?.txt" -o -name "*.pdf" \)! -name test1.txt

./ISBN-9787511415073.pdf

 

 

./testredis/test2.txt

-user username

       按文件属主来查找

[root@localhostfindtest]# find . -user apache -name "*.txt"

./test.txt

-group groupname

      按组来查找

-type b/d/c/p/l/f

          Unix 类系统将一切都视为文件。文件具有不同的类型,例如普通文件(f)、目录(d)、字符设备(c)、块设备(b)、符号链接(l)、硬链接(h)、套接字(s)以及FIFO(p)等。-type可以对文件搜索进行过滤。借助这个选项,我们可以为find命令指明特定的文件匹配类型。

[root@localhostfindtest]# find . -type d

.

./testredis

-mtime\-atime\-ctime  -n\+n

          指定按时间来搜索。-mtime,按文件更改时间来查找文件;-atime,按文件访问时间来查找文件;-ctime,按文件状态改变时间来查找文件;

它们可以用整数值指定时间选项,单位是天,-表示小于,+表示大于。如

        当前目录下打印出恰好在7天前被访问过的所有文件

$ find. -type f -atime 7 -print

         打印出访问时间超过7天的所有文件

$ find. -type f -atime +7 -print

     -atime 、-mtime以及-ctime都是基于时间的参数,其计量单位是“天”。还有其他一些基于时间的参数是以分钟作为计量单位的:-amin(访问时间)、-mmin(修改时间)、-cmin(变化时间)。

-newer filename

查更改时间比filename新的文件

$ find. -type f -newer file.txt

-nogroup            

           #查无有效属组的文件,即文件的属组在/etc/groups中不存在

-nouser            

             #查无有效属主的文件,即文件的属主在/etc/passwd中不存

-perm

也可以根据文件权限进行文件匹配。

如打印出权限为644 的文件

$ find. -type f -perm 644 -print

-sizen [bkMG]

         查长度为n[bkMG]字节的文件,查找大于某个数值的文件时,n前面加+;小于的话加-。

-delete

           可以用来删除find查找到的匹配文件。

           如删除当前目录下所有的 .swp文件:

$ find. -type f -name "*.swp" -delete

-prune

        在搜索目录并执行某些操作时,有时为了提高性能,需要跳过一些子目录。将某些文件或目录从搜索过程中排除在外的技巧被称为修剪(搜索不会进入这些目录下)。通常和-o连用,后面跟上表达式。

[root@localhostfindtest]# find . -path "./testredis" -prune -o -name"*.txt"

./test.txt

./testredis

./logincook.txt

-path "./testredis"

-prune 的作用是用于进行排除,它指明当前目录下的testredis目录应该被排除在外,

 -maxdepth \-mindepth

         find命令在使用时会遍历所有的子目录。我们可以采用深度选项-maxdepth和-mindepth

          来限制find命令遍历的目录深度。我们使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为1;当需要向下两级时,深度可以设置为2;其他情况可以依次类推。

可以用-maxdepth指定最大深度。如

$ find. -maxdepth 1 -name "f*" -print

            该命令列出当前目录下的所有文件名以f 打头的文件。即使有子目录,也不会被打印或遍历。

              -mindepth类似于 -maxdepth,不过它设置的是find开始遍历的最小深度。这个选项可以用来查找并打印那些距离起始路径一定深度的所有文件。例如,打印出深度距离当前目录至少两个子目录的所有文件,即告诉find应该从距离当前目录2级的地方开始向下查找。

$ find. -mindepth 2 -name "f*" -print

./dir1/dir2/file1

./dir3/dir4/f2

即使当前目录或dir1 和dir3 中包含有文件,它们也不会被打印出来。

            -maxdepth和-mindepth应该作为find的第三个参数出现。如果作为第4个或之后的参数,就可能会影响到find的效率,因为它不得不进行一些不必要的检查。例如,如果-maxdepth作为第四个参数,-type 作为第三个参数,find首先会找出符合-type的所有文件,然后在所有匹配的文件中再找出符合指定深度的那些。但是如果反过来,目录深度作为第三个参数,-type作为第四个参数,那么find就能够在找到所有符合指定深度的文件后,再检查这些文件的类型,这才是最有效的搜索之道。

-exec

       find命令可以借助选项-exec 与其他命令进行结合。find命令对匹配的文件执行该参数所给出的任何shell命令。-exec之后可以接任何命令,它的格式如下

                                                           'command'{ } \;

         注意{ }和\之间的空格,{}表示一个匹配。对于任何匹配的文件名,{}均会被该文件名所替换,";"表示命令结束,"\"用于转义且前面必须要有空格。

如将7天前的文件复制到testdir目录中:

$ find. \( -path "./flaskweb"  -o-path "./.git"  \) -prune-o  \( -type f -mtime +7 \) -exec cp {}testdir \;

             我们无法在-exec 参数中直接使用多个命令。它只能够接受单个命令,不过我们可以耍一个小花招。把多个命令写到一个shell 脚本中(例如command.sh ),然后在-exec中使用这个脚本(需要指定路径)。

一个例子,查找七天前修改过的文件(不包括子目录)并打印

[root@localhostfindtest]# date

ThuJul 11 18:12:41 CST 2019

 

#满足条件的文件

[root@localhostfindtest]#  filelist=`find . -path"./testredis" -prune -o  -mtime+7`

#打印或作其他处理

[root@localhostfindtest]# for i in $filelist;do echo $i;done

./test.txt

./ISBN-9787511415073.pdf

./testredis

./dump.rdb

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

推荐阅读更多精彩内容

  • | Day11 || 作者:方维超 归档:课后笔记 时间:2019/3/14 || 快捷键: Ctrl + 1 标...
    Ffvc阅读 408评论 0 0
  • find命令是用于实现精确查找,实时查找指定目录下面的文件。在工作中常用。优点是:实时,精确。缺点是:比较占用系统...
    dxldeng阅读 718评论 0 1
  • 查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) ...
    jnxc1888阅读 1,599评论 0 0
  • 与闺蜜同处一室,醒来彼此道一声早安,真的很幸福!感谢有你!谢谢!谢谢!谢谢! 婷上班前叮嘱我带水果,酸奶,零食!谢...
    Iris若一阅读 359评论 0 1
  • 我,是你的将来 中午的太阳,没有想着要回去休息,剔着牙,看着人来人往。 文田抓着跑向公司门口,他要去见一个人。为了...
    芥末无姜阅读 269评论 0 0