精华内容
下载资源
问答
  • Linux系统下的Find 命令具有很强大的搜索功能,可以遍历整个文件系统。所以 find 命令很耗资源,有时候甚至会耗费很长时间,因此建议把它放在后台执行。 Find 命令格式如下所示: find pathname -options [-print -...
  • find命令详解

    万次阅读 2018-05-03 13:08:17
    如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 语法 ·find path -option [ -print ] [ -exec -ok command ] {} \  find ...

    前提

        Linux秉承着“一切皆文件”的哲学思想,当然这也是对linux文件系统的一种抽象说法,从设备驱动程序、目录、系统配置、内核参数到任务进程都是用文件来表示的。其中的任何事物,无论是纯文本文件(例如/etc/hosts)、块设备或字符设备驱动程序或者内核状态与配置(例如/proc/cpuinfo),他们都用文件的形式表示。 一切皆文件,这意味着从系统的一部分学到的原理可以适用于系统的其他部分。

       所以怎么查找文件就显得非常重要了,今天我们就来详细的学习一下find命令的用法。

          find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

    语法

    ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \

      find      (指定目录)     (指定选项)                                 [查找玩之后执行的动作 ]

    常用选项

    -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;

    -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;

    -atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;

    -cmin<分钟>:查找在指定时间之时被更改过的文件或目录;

    -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

    -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;

    -daystart:从本日开始计算时间;

    -depth:从指定目录下最深层的子目录开始查找;

    -expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;

    -exec<执行指令>:假设find指令的回传值为True,就执行该指令;

    -false:将find指令的回传值皆设为False;

    -fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;

    -follow:排除符号连接;

    -fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;

    -fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;

    -fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;

    -fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;

    -gid<群组识别码>:查找符合指定之群组识别码的文件或目录;

    -group<群组名称>:查找符合指定之群组名称的文件或目录;

    -help或——help:在线帮助;

    -ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;

    -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;

    -inum<inode编号>:查找符合指定的inode编号的文件或目录;

    -ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;

    -iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;

    -links<连接数目>:查找符合指定的硬连接数目的文件或目录;

    -iname<范本样式>:指定字符串作为寻找符号连接的范本样式;

    -ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;

    -maxdepth<目录层级>:设置最大目录层级;

    -mindepth<目录层级>:设置最小目录层级;

    -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;

    -mount:此参数的效果和指定“-xdev”相同;

    -mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;

    -name<范本样式>:指定字符串作为寻找文件或目录的范本样式;

    -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

    -nogroup:找出不属于本地主机群组识别码的文件或目录;

    -noleaf:不去考虑目录至少需拥有两个硬连接存在;

    -nouser:找出不属于本地主机用户识别码的文件或目录;

    -ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;

    -path<范本样式>:指定字符串作为寻找目录的范本样式;

    -perm<权限数值>:查找符合指定的权限数值的文件或目录;

    -print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;

    -print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;

    -printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;

    -prune:不寻找字符串作为寻找文件或目录的范本样式;

    -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;

    -size<文件大小>:查找符合指定的文件大小的文件;

    -true:将find指令的回传值皆设为True;

    -typ<文件类型>:只寻找符合指定的文件类型的文件;

    -uid<用户识别码>:查找符合指定的用户识别码的文件或目录;

    -used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;

    -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;

    -version或——version:显示版本信息;

    -xdev:将范围局限在先行的文件系统中;

    -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

    常用示例

    find

    列出当前目录及子目录下所有文件和文件夹


    • 按照文件名查找:

    find /home  -name "*.t?t"   *表示通配任意个字符  表示通配单个字符

    列出/home 目录下的以 .t t结尾的文件,两个t中间为一个字符。


    • 按照文件时间戳查找:

    首先我们先简要了解一下文件的时间戳的概念,可以用stat或者ls 命令查看文件的三个时间戳。

    访问时间Accessatime
    修改时间Modifymtime
    状态改动时间Changectime


    下面是man手册中给予的(+ - n)的解释:


    我撷取了鸟哥linux私房菜中对正负号的解释:

    图中最右边为目前的时间,越往左边则代表越早之前的时间轴啦。由图我们可以清楚的知道:

    • +4代表大于等于5天前的档名:ex> find /var -mtime +4
    • -4代表小于等于4天内的档案档名:ex> find /var -mtime -4
    • 4则是代表4-5那一天的档案档名:ex> find /var -mtime 4

    find   /usr   -mtime  -4   查找文件更新日时在距现在时刻4天以内的文件

    find   /usr  -mtime  +4    查找文件更新日时在距现在时刻5天以上的文件

    find   /usr   -mtime   4   查找文件更新日时在距现在时刻4天以上5天以内的文件


    通过wc -l统计行数可以看出内容修改过的文件数符合正常的文件修改的规律。

    • 按照文件所有者和群组来查找:

    find  / -user mhy 


    注意:find / -nouser  -a -nogroup  可以找出系统中不属于任何人和任何群组的文件,对于这些文件我们需要保持警惕。

    这里我们可以引申 -a -o -not的用法:

    -o 是或者的意思  

    -a 是而且的意思  

    -not 是相反的意思  

    通过这三个我们可以自由组合各种筛选选项或者规则。比如:列出/var目录下属于某个用户的文件并且文件名包含a的文件。



    • 按照文件类型来查找文件:

    find / -type p

    列出所有的管道类型文件


    • 按照文件大小来查找文件:

     find  / -size  +10M

    列出/usr中大于10M的文件


    • 按照文件权限来查找文件:

    find /var -perm 777

    列出/var目录下文件权限为777的文件


    引申内容:

    find查找后执行的命令

    -print: find命令将匹配的文件输出到标准输出。
    -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {}  \;,注意{ }和\;之间的空格。

    -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

    注意一点:{}中的内容并非一次引用所有的搜索出的内容,而是一行一行引用。我也是在-exec tar -zcvf some.tar.gz {}  \;时发现的。

    举两个例子:

    查找一下/var/log目录下内容更改时间40天前并且大于100K的文件,并列出他们的路径。

     find /var/log   -mtime +40 -a -size +100k -exec ls -lh {} \;


    查找一下/var/log目录下内容更改时间30天前并且不属于root群组的文件,并提示是否删除他们。

    find /var/log -type f -a  -mtime  +30 -not -group root -ok rm -rf {} \;



    好了,今天就写到这里了,本人不才,如有错误请读者指出,十分感谢!


    展开全文
  • 查找分为三类: 1.which:命令查找 2.find:文件查找,针对文件名 3.locate:文件查找,依赖... 命令, 路径, 选项, 表达式 , 动作 1.按文件名来查找 [root@localhost ~]# find /etc -name hosts /etc/hosts /e
  • find 查找命令

    千次阅读 2019-03-21 09:59:14
    3.4 find查找命令 3.4.1 语法 用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression] 默认路径为当前目录;默认表达式为 –print find [-H] [-L] [-P] [-D ...

    3.4 find查找命令

    3.4.1 语法

    用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path…] [expression]
    默认路径为当前目录;默认表达式为 –print
    find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

    3.4.2 简单示例

    • 【find /tmp/ -name “*”】在tmp目录下查找所有文件和目录(查找范围包含子目录)
      在这里插入图片描述
    • 【find / -maxdepth 1 -name “*”】
      查找根目录下,所有文件,不像下延伸,即只查找根目录下的文件和文件夹(相当于指定目录下的一级目录,不在其子目录中查找)。
      在这里插入图片描述
      同理示例
    • 【find ./ -maxdepth 1 -name “a*”】在当前目录下最多延伸到当前目录(即不延伸子目录查找)查找以a开头的文件和文件夹
      在这里插入图片描述
    • 【find ./ -maxdepth 3 -mindepth 2 -name “a*”】在当前目录下面向下延伸2级,最多延伸至3级目录。查找文件名以a开头的文件和目录
      在这里插入图片描述
    • 【find -user root】在当前目录下面查找root用户所建立的文件或文件夹

    3.4.3 常用参数

    3.4.3.1 匹配标准参数
    • 【-name ‘FILENAME’】:对文件名做精确匹配
      文件名通配符为:{*|?|[]}
      • 【*】表示配置任意长度的任意字符
      • 【?】表示匹配任意的字符(只占一个字符)
      • 【[]】组合,只匹配组合中的一种情况()
        例如:【find -name ‘[b,c]’】在当前目录下查找,只匹配首字母为a或者b的文件或者文件夹
        在这里插入图片描述
    • 【-iname ‘FILENAME’】:表示文件名匹配不区分大小写
    • 【-regex PATTERN】:基于正则表达式进行文件名匹配匹配
    • 【-user USERNAME】:基于文件的属主名来查找
    • 【-group GROUPNAME】:根据属组名来查找
    • 【-uid UID】:根据属主的id号来查找
    • 【-gid GID】:根据属组的id号来查找
    • 【-nouser】:查找没有属主的文件
    • 【-nogroup】:查找没有属组的文件
    • 【-size】:根据文件大小查找
      #k,#M,#G 如果没指定单位默认是字节
      [+|-]#k //如果+10k表示查找大于10k的文件,如果是-10k查询小于10k的文件
      例如:find /etc –size 10k –ls 表示查询文件在10k~9k的文件
    • 【-type】:根据文件类型查找
      常用文件类型有
      • f:普通文件
      • d:目录文件
      • c:字符文件
      • b:块文件
      • l:符号链接文件
      • p:管道设备文件
      • s:套接字设备文件
        例如: find /tmp/ -type d //表示查询tmp目录下的所有为目录的文件(查询目录)
    3.4.3.2 组合查找参数
    • 【-a】相当于&&,且
    • 【-o】相当于||,或
    • 【-not】相当于!,非
      例如:
      【find /tmp –nouser –a –type d -ls】查询tmp目录下面没有属组并且为目录的文件(ls 表示详细显示查询到文件信息)
      【find /tmp –nouser -o –d -ls】查询tmp目录下面没有属组的文件,或者只是目录的目录文件
      例如:/tmp/test目录下,属主不是user1,也不是user2的文件
      【find /tmp/test –not (-user user1 –o –user user2 ) -ls】
    3.4.3.3 根据文件时间戳查找参数
    • 【-mtime】:根据文件的修改时间查找
    • 【-ctime】:根据文件的改变时间
    • 【-atime】:根据文件的访问时间
      【+|-】#也支持
      +5 离现在为止,至少有5天没访问
      -5 离现在为止,最近5天曾经访问过
      5 离现在为止,刚好5天访问过
    • 【-mmin】:根据文件的修改时间(按分钟计算)
    • 【-cmin】:根据文件的改变时间
    • 【-amin】:根据文件的访问时间
    • 【+|-】#

    例如:find ./ -amin -5 表示查找5分钟之内访问过的文件
    find ./ -amin 5 表示刚好过去5分钟那一刻访问过的文件
    find ./ -amin +5 表示至少有5分钟没访问过的文件,即5分钟之前访问过的文件

    3.4.3.4 根据文件权限查收参数
    • 【-perm MODE】精确匹配才能满足条件
    • 【-perm /MODE】任意一位权限匹配就可以满足条件
    • 【-perm -MODE】包含匹配

    例如:【find ./ -perm 644】 表示权限为644的文件做精确匹配
    【find ./ -perm /644】 但凡三个权限中有一个匹配就可以
    【find ./ -perm -644】(rw-r–r--) 即包含关系。例如755(rwxr-xr-x)包含644(rw-r—r–),755也可以查出来。750(rwxr-x—)就不能匹配
    例如:【find ./ -perm -00l】 表示查找其他用户有执行权限的文件
    【find ./ -perm -022】 表示组有写权限并且其他用户也有写权限
    【find ./ -perm /022】 表示组有写权限或者其他用户有写权限

    3.4.3.5 其它参数
    • 【-print】将查找到的文件输出到标准输出
    • 【-exec command {} \】将查找到的文件执行command操作,{}和\之间有空格
    • 【-ok】和-exec相同,只不过在操作前要询问用户

    例子:【find ./ -perm -006 –exec chmod o-w {} \】
    表示把查找到的文件去掉其他用户的写入权限

    例: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 #忽略某个目录
    =====================================================
    KaTeX parse error: Expected 'EOF', got '#' at position 40: …t" -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 -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
    find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为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 tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
    find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
    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 -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
    find /home -name tmp.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 -name tmp.txt -exec cat {} ;
    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 ./ -user gandian -a -perm -020 -exec mv {} {}.new ;
    表示将当前木下属主是gandian并且属组有写权限的文件的文件名,后面都加上【.new】字符
    相关命令
    【xargs】命令
    例如
    find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles ;
    等同于
    find /etc -size +1M | xargs echo >>/tmp/etc.largefiles
    =======================相关示例
    1、查找/var目录下属主为root并且属组为mail的所有文件;
    find /var -user root -a -group mail -ls
    2、查找/usr目录下属主不是root,bin,或student的文件;
    find /usr -not ( -user root -o -user bin -o -user student ) -ls
    3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
    find /etc -not -user root -a -not -user student -a -mtime -7 -ls
    4、查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为root
    find / ( -nouser -o -nogroup ) -a -atime -1 -exec chown root:root {} ;
    5、查找/etc目录下大雨1M的文件,并将其文件名写入/tmp/etc.largefiles文件中。
    find /etc -size +1M -exec echo “{}” >>/tmp/etc.largefiles ;
    find /etc -size +1M >> /tmp/etc.largefiles
    6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息:
    find /etc -not -perm /222 -ls

    3.4.4 附加(find --help)

    [root@gdy tmp]# find --help
    用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
    
    默认路径为当前目录;默认表达式为 -print
    表达式可能由下列成份组成:操作符、选项、测试表达式以及动作:
    
    操作符 (优先级递减;未做任何指定时默认使用 -and):
          ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
          EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2
    
    位置选项 (总是真): -daystart -follow -regextype
    
    普通选项 (总是真,在其它表达式前指定):
          -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
          --version -xdev -ignore_readdir_race -noignore_readdir_race
    
    比较测试 (N 可以是 +N 或 -N 或 N): -amin N -anewer FILE -atime N -cmin N
          -cnewer 文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称
          -ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式
          -links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件
          -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 ;
    
    通过 findutils 错误报告页 http://savannah.gnu.org/ 报告错误及跟踪修定过程。如果您无法浏览网页,请发电子邮件至 <bug-findutils@gnu.org>。
    [root@gdy tmp]#
    

    3.4.5 附加(正则表达式语法)

     元字符	描述
    \	将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。
    ^	匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
    $	匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
    *	匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。
    +	匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
    ?	匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。
    {n}	n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
    {n,}	n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
    {n,m}	m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o为一组,后三个o为一组。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
    ?	当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多地匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少地匹配“o”,得到结果 ['o', 'o', 'o', 'o']
    .点	匹配除“\n”和"\r"之外的任何单个字符。要匹配包括“\n”和"\r"在内的任何字符,请使用像“[\s\S]”的模式。
    (pattern)	匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
    (?:pattern)	非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分时很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
    (?=pattern)	非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
    (?!pattern)	非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
    (?<=pattern)	非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
    *python的正则表达式没有完全按照正则表达式规范实现,所以一些高级特性建议使用其他语言如java、scala等
    (?<!patte_n)	非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
    *python的正则表达式没有完全按照正则表达式规范实现,所以一些高级特性建议使用其他语言如java、scala等
    x|y	匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[zf]ood”则匹配“zood”或“food”。
    [xyz]	字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
    [^xyz]	负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”任一字符。
    [a-z]	字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
    注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.
    [^a-z]	负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
    \b	匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。
    \B	匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
    \cx	匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
    \d	匹配一个数字字符。等价于[0-9]。grep 要加上-P,perl正则支持
    \D	匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持
    \f	匹配一个换页符。等价于\x0c和\cL。
    \n	匹配一个换行符。等价于\x0a和\cJ。
    \r	匹配一个回车符。等价于\x0d和\cM。
    \s	匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
    \S	匹配任何可见字符。等价于[^ \f\n\r\t\v]。
    \t	匹配一个制表符。等价于\x09和\cI。
    \v	匹配一个垂直制表符。等价于\x0b和\cK。
    \w	匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
    \W	匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
    \xn	匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。
    \num	匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
    \n	标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
    \nm	标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
    \nml	如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
    \un	匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(&copy;)。
    \p{P}	小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。
    其他六个属性:
    L:字母;
    M:标记符号(一般不会单独出现);
    Z:分隔符(比如空格、换行等);
    S:符号(比如数学符号、货币符号等);
    N:数字(比如阿拉伯数字、罗马数字等);
    C:其他字符。
    *注:此语法部分语言不支持,例:javascript。
    \<
    \>	匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。
    ( )	将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
    |	将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
    
    展开全文
  • Linux系统find命令用法总结find命令是一种通过条件匹配在指定目录下查找对应文件或者目录的工具。匹配的条件可以是文件名称、类型、大小、权限属性、时间戳等。find命令还可以配合相关命令对匹配到的文件作出后续...

    Linux系统find命令用法总结

    find命令是一种通过条件匹配在指定目录下查找对应文件或者目录的工具。匹配的条件可以是文件名称、类型、大小、权限属性、时间戳等。find命令还可以配合相关命令对匹配到的文件作出后续处理。

    工作原理及特点

    find在工作时会遍历指定的目录,通过匹配指定的条件搜寻我们需要的文件或者目录。因此,find命令具有以下特点:
    * 查找速度略慢
    * 精却查找
    * 实时查找
    * 可能只搜索用户具备读取和执行权限的目录(这点同locate)

    命令用法

    find命令语法格式为: find [path...] [expression]
    [path...]为需要查找文件所指定的路径。如果不指定,则默认为当前目录及其子目录。
    [expression]为匹配条件/表达式。如果未设置匹配条件,则默认查找指定目录及子目录下所有文件

    匹配条件

    1.指定搜索目录层级/深度

    指定搜索目录的层级需要用到选项-maxdepth和-mindepth,分别指定搜索目录的最大深度和最小深度。两个选项可以配合使用,指定搜索目录的深度范围。如果-maxdepth/-mindepth二者的参数相同,则find命令会搜索某个特定深度的文件

    -maxdepth level 指定最大搜索目录深度level,指定的目录为第1-mindepth level 指定最小搜索目录深度level。配合-maxdepth可搜索指定深度的文件。

    用法示例
    * find / -maxdepth 2 -name "*.conf"
    该命令中”/”为第一级目录,查找文件的最大目录深度为2。
    * find / -maxdepth 3 -mindepth 3 -name "*.conf"
    查找文件的最大目录深度为3。

    代码实现:

    [root@Centos7T test1]#ls -AR ./                # 查看当前目录及子目录下所有文件 #
    ./:
    f1  f2  test2
    ./test2:
    f3  f4  test3
    ./test2/test3:
    f5  f6
    [root@Centos7T test1]#find -maxdepth 2         # 查找最大目录深度为2的所有文件 #
    .
    ./test2
    ./test2/test3
    ./test2/f3
    ./test2/f4
    ./f1
    ./f2
    [root@Centos7T test1]#find -mindepth 2 -name "f*"  # 查找最大目录深度为2的所有文件 #
    ./test2/test3/f5
    ./test2/test3/f6
    ./test2/f3
    ./test2/f4
    [root@Centos7T test1]#find -maxdepth 2 -mindepth 2
    ./test2/test3
    ./test2/f3
    ./test2/f4

    2.根据文件名和inode查找

    在上面的例子中,我们使用了-name选项查找f开头的文件,现在我们开始讲解如何根据文件名查找指定文件。另外,由于每个文件都有一个inode编号与其对应,除了硬链接文件外,同一分区下,每个文件的inode编号都是唯一的,也因此我么可以利用inode编号及文件的链接数来查找符合条件的文件。相关选项用法如下:

    -name "FILE_NAME"   文件名查找,支持使用glob:*、?、[]、[^]
    -iname "FILE_NAME"  文件名查找,不区分大小写
    -inum n             按inode号查找
    -samefile name      查找与指定文件有相同inode号的文件,一般用于查找硬连接文件
    -links n            查找连接数为N的文件
    -regex "PATTERN"PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

    代码实现:

    [root@Centos7T test1]#find ./ -name "f*"       # 查找制定目录下所有文件名以f开头的文件 #
    ./test2/test3/f5
    ./test2/test3/f6
    ./test2/test3/f1-link
    ./test2/f3
    ./test2/f4
    ./f1
    ./f2
    [root@Centos7T test1]#find ./ -samefile "f1"  # 查找与当前目录下文件f1有相同inode编号的文件 #
    ./test2/test3/f1-link
    ./f1
    [root@Centos7T test1]#ll -i ./test2/test3/f1-link ./f1  # 验证查找结果的inode编号 #
    74 -rw-r--r--. 2 root root 0 Aug  6 13:45 ./f1
    74 -rw-r--r--. 2 root root 0 Aug  6 13:45 ./test2/test3/f1-link
    [root@Centos7T test1]#find ./ -links 2
    ./test2/test3
    ./test2/test3/f1-link
    ./f1
    [root@Centos7T test1]#ll -ad ./test2/test3 ./test2/test3/f1-link ./f1
    -rw-r--r--. 2 root root  0 Aug  6 13:45 ./f1
    drwxr-xr-x. 2 root root 41 Aug  6 14:36 ./test2/test3
    -rw-r--r--. 2 root root  0 Aug  6 13:45 ./test2/test3/f1-link
    [root@Centos7T test1]#find ./ -regex ".*f[0-9]$"
    ./test2/test3/f5
    ./test2/test3/f6
    ./test2/f3
    ./test2/f4
    ./f1
    ./f2

    3.根据属主/属组查找

    根据文件的属主以及属组信息,我们可以查找符合指定属主、属组的文件。相关选项用法如下:

    -user username      查找属主为指定用户(UID)的文件
    -group groupname    查找属组为指定组(GID)的文件
    -uid UseerID        查找属主为指定的UID号的文件
    -gid GroupID        查找属组为指定的GID号的文件
    -nouser             查找没有属主的文件
    -nogroup            查找没有属组的文件

    代码实现:

    [root@Centos7T test1]#ll
    total 0
    -rw-r--r--. 1 root     root     0 Aug  6 13:45 f1
    -rw-r--r--. 1 geoffrey root     0 Aug  6 13:45 f2
    -rw-r--r--. 1 root     geoffrey 0 Aug  6 15:04 f3
    -rw-r--r--. 1 geoffrey geoffrey 0 Aug  6 15:04 f4
    [root@Centos7T test1]#find ./ -user geoffrey
    ./f2
    ./f4
    [root@Centos7T test1]#find ./ -group geoffrey
    ./f3
    ./f4
    [root@Centos7T test1]#find ./ -gid 0
    ./
    ./f1
    ./f2

    4.根据文件类型查找

    linux系统中的文件大致分为以下种:普通文件、目录文件、二进制程序文件、符号链接文件、套接字文件、块设备文件、字符设备文件。我们可以指定搜索文件的文件类型以达到查找文件的目的。命令用法为find [path] -type TYPE。所搜文件的具体类型有TYPE的值确定。TYPE的值及具体含义如下:

    f  普通文件
    d  目录文件
    l  符号链接文件
    s  套接字文件
    b  块设备文件
    c  字符设备文件
    p  管道文件

    代码实现:

    [root@Centos7T ~]#find /dev -type b
    /dev/sda5
    /dev/sda4
    /dev/sda3
    ······
    root@Centos7T ~]#find / -maxdepth 1 -type d
    /
    /app
    /boot
    /dev
    ······
    [root@Centos7T ~]#find /etc -maxdepth 1 -type l
    /etc/favicon.png
    /etc/redhat-release
    /etc/system-release
    /etc/mtab
    ······

    5.根据文件大小查找

    命令用法为find [path] -size [+|-]N
    其中N为文件大小,单位为c/k/M/G.
    [+|-]N的具体含义如下:

    50k:   搜索49k~50k大小的文件   N-1~N
    +50k:  搜索大于50k的文件       N~······
    -50k:  搜索小于49k的文件       0~N-1

    代码实现:

    [root@Centos7T ~]#find /app -size 2M
    /app/man_pages_zh-CN_v1.6.2.1.tar.gz
    [root@Centos7T ~]#find /app -size +10k
    /app/man_pages_zh-CN_v1.6.2.1.tar.gz
    /app/source/httpd-2.2.34.tar.gz
    /app/source/httpd-2.4.27.tar.bz2
    /app/source/nginx-1.12.1.tar.gz
    /app/source/linux-4.12.4.tar.xz
    [root@Centos7T ~]#find /app -size -1k
    /app/wang/1024
    /app/wang/18_f2
    /app/wang/2048
    /app/wang/4096
    /app/wang/9172
    /app/wang/f1
    /app/wang/test110
    /app/wang/test

    6.根据时间戳查找

    文件的时间戳分为访问时间(access time)/修改时间(modify time)/创建时间(create time),分别简写为atime/mtime/ctime。我们可以根据这三个时间戳查找对应文件。命令用法如下:

    -atime [+|-] N
        N:[N,N+1)   +N :[N+1,······]   -N :[0,N)
        N:[a,b]以当前时刻点往前推(N+1)*24小时为最远时刻点a,以当前时刻点往前推N*24小时为最近时刻点b。时间段长度h=24h
       -N:[a,b]以当前时刻往前推N*24小时为最远时刻点a,最近时刻点b不是当前时间,而是未!来!任意时间(-1能搜出未来很多年的文件),时间段长度N*24h<H
       +N:[-oo,b]最远时刻点为负无穷,以当前时刻点往前推(N+1)*24小时为最近时刻点b
    -mtime [+|-] N
    -ctime [+|-] N

    代码实现:

    [root@Centos7T app]#find /app -atime +1
    /app/wang/1024
    /app/wang/18_f2
    /app/wang/2048
    /app/wang/4096
    /app/wang/9172
    /app/wang/f1
    [root@Centos7T app]#find /app -atime -1
    /app/test1
    /app/test1/f1
    /app/test1/f2
    /app/test1/f3
    /app/test1/f4
    [root@Centos7T app]#find /app -atime 1
    /app/systeminfo.sh
    /app/arg.sh
    /app/wang/08-scp.sh
    /app/wang/1024.sh
    /app/wang/11backup.sh
    /app/wang/11scp.sh
    /app/wang/15scp.sh
    /app/wang/17scp.sh

    7.根据权限查找

    我们可以根据文件三类访问对象的三种三种权限查找对应文件,命令用法如下:

    -perm [/|-] MODE
       MODE:精确匹配三类对象(u,g,o)的权限
      /MODE:三类对象只要有一类对象中的三个权限位匹配一位即可,或关系(/444,三个只要有一 个“有”读权限(注意不是“是”读权限,))
      -MODE:三类对象分别有对应权限,是否还有其他权限不在意,与关系(-444,三个都要“有”读权限,可以匹配到4,6,7;是否还有写或者执行权限不关心)
      Notes:/或者-后面需要匹配的权限出现0(例如404),,则表明不关心该对象权限(例如440,所属组有无权限都不关心)。如果单独的权限表示精确匹配,则表明该对象无任何权限

    代码实现:

    [root@Centos7T test1]#ll
    total 0
    --wx--x--x. 1 root root 0 Aug  6 13:45 f1
    -rw-r--r-x. 1 root root 0 Aug  6 13:45 f2
    -r-xr--r--. 1 root root 0 Aug  6 15:04 f3
    --w--wx-w-. 1 root root 0 Aug  6 15:04 f4
    [root@Centos7T test1]#find ./ -name "f*" -perm 311
    ./f1
    [root@Centos7T test1]#find ./ -name "f*" -perm 232
    ./f4
    [root@Centos7T test1]#find ./ -name "f*" -perm /122
    ./f1
    ./f3
    ./f4
    [root@Centos7T test1]#find ./ -name "f*" -perm /442
    ./f2
    ./f3
    ./f4
    [root@Centos7T test1]#find ./ -name "f*" -perm -644
    ./f2
    [root@Centos7T test1]#find ./ -name "f*" -perm -244
    ./f2
    [root@Centos7T test1]#find ./ -name "f*" -perm -444
    ./f2
    ./f3

    处理动作

    有时候我们查找文件可能还会对这些文件进行后续的操作,例如删除,修改权限等。可以使用以下命令:

    -print:默认的处理动作,显示至屏幕
    -ls   :类似于对查找到的文件执行“ls -l”命令
    -delete:删除查找到的文件 *慎用!*
    -fls file :查找到的所有文件的长格式信息保存至指定文件中,也可用重定向的方式
    -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
    -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND指定的命令,没有-ok中的交互式确认。
        其中{}用于引用查找到的文件名称自身,\;是配合-ok和-exec选项的。

    代码实现:

    [root@Centos7T app]#find ./test1/ -type f -perm -001
    ./test1/f1
    ./test1/f2
    [root@Centos7T app]#find ./test1/ -type f -perm -001 -exec chmod o-x {} \;
    [root@Centos7T app]#ll ./test1/*
    --wx--x---. 1 root root 0 Aug  6 13:45 ./test1/f1
    -rw-r--r--. 1 root root 0 Aug  6 13:45 ./test1/f2
    -r-xr--r--. 1 root root 0 Aug  6 15:04 ./test1/f3
    --w--wx-w-. 1 root root 0 Aug  6 15:04 ./test1/f4

    关于find命令的用法就介绍到这。

    展开全文
  • 文章目录一、通配符shell常见的通配符shell元字符shell转义符二、find命令查找条件处理动作练习题: 一、通配符 通配符: 是shell在做匹配的时候会用到,一般用于匹配文件名 它是由shell进行解析的,比如 find ls cp...

    一、通配符

    通配符: 是shell在做匹配的时候会用到,一般用于匹配文件名
    它是由shell进行解析的,比如 find ls cp 等等命令都可以配合着通配符一起使用

    shell常见的通配符

    * : 匹配0或者多个字符 
    ?: 匹配任意1个字符
    [list]: 匹配list中任意单个字符 
    [c1-c2]: 匹配c1-c2中任意单个字符
    [^c1-c2]: 不匹配c1-c2中任意单个字符
    {string1,string2....} : 匹配{}中任意单个字符 
    
    [root@test tmp]# touch 1.txt 11.txt 111.txt
    [root@test tmp]# ll
    total 0
    -rw-r--r--. 1 root root 0 Feb  8 06:34 111.txt
    -rw-r--r--. 1 root root 0 Feb  8 06:34 11.txt
    -rw-r--r--. 1 root root 0 Feb  8 06:34 1.txt
    [root@test tmp]# ll *.txt
    -rw-r--r--. 1 root root 0 Feb  8 06:34 111.txt
    -rw-r--r--. 1 root root 0 Feb  8 06:34 11.txt
    -rw-r--r--. 1 root root 0 Feb  8 06:34 1.txt
    [root@test tmp]# ll 1?.txt
    -rw-r--r--. 1 root root 0 Feb  8 06:34 11.txt
    

    匹配条件:
    1. *
    2. ?.txt
    3. [123]1.txt --> 11.txt 21.txt 31.txt
    4. [1-9].txt --> 1.txt 2.txt … 9.txt
    5. [^a-z].txt --> 除了a.txt … z.txt文件
    6. {A,B,C}.txt --> A.txt B.txt C.txt文件

    shell元字符

    IFS : <tab>/<space>/<enter>
    CR: <enter>
    = :设定变量
    $ : 获取变量
    >< : 重定向
    | : 管道
    & : 后台执行命令
    () : 在子shell中执行命令/运算或命令替换等
    {}:  函数中执行/变量替换的范围定界
    ; : 命令结束后,忽略其返回值,继续执行下一个命令
    && : 命令结束后,若为true,继续执行下一个命令
    || :  命令结束后,若为false,继续执行下一个命令
    ! : 非 
    # :注释
    \ : 转义 
    

    shell转义符

    硬转义: 内部所有shell元字符、通配符等 都会被关闭掉  ' '
    软转义: 内部所有shell元字符、通配符等 都正常生效  " "
    

    案例:

    [root@test test1]# a=1
    [root@test test1]# echo '$a'
    $a
    [root@test test1]# echo "$a"
    1
    

    二、find命令

    实时查找工具,通过遍历指定路径下的文件系统完成文件查找

    • 工作特点:
      查找速度略慢
      精确查找
      实时查找
    [root@test tmp]# find --help
    Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
    

    find [选项] [路径] [查找条件 + 处理动作]

    路径: 指定具体目录路径,默认是当前文件夹
    查找条件: 指定查找的标准(文件名/大小/文件类型/权限等等),默认是找出所有文件
    处理动作: 对符合条件的文件做什么操作,默认是输出屏幕


    查找条件

    • 根据文件名称查找:
      -name “filename” 根据文件名称查找(支持通配符global)
      -iname “filename” 根据文件名称查找;忽略大小写(支持通配符global)
      -regex “PATTERN” 以pattern匹配整个文件路径字符串,而不仅仅是文件名称
    [root@test tmp]# find ./ -name "1[123].txt"
    

    • 根据属主和属组查找:
      -user username : 查找属主为指定用户的文件
      -group groupname: 查找属组为指定用户的文件
      -uid UID : 查找属主为指定UID号的文件
      -gid GID :查找数组为指定GID号的文件
      -nouser: 查找没有属主的文件
      -nogroup: 查找没有属组的文件

    • 根据文件类型查找:
      -type TYPE :
      TYPE: f d l s b c p
      * f: 普通文件

    d: 目录文件
    l: 符号链接文件
    s:套接字文件
    b: 块设备文件
    c: 字符设备文件
    p: 管道文件


    • 组合条件:
      与:-a
      或:-o
      非: -not

    相关案例:找出/tmp目录下,属主不是root,且文件名不是fstab的文件

    [root@test tmp]# find /tmp \( -not -user root -a -not -name "fstab" \) 
    

    注意:因为识别问题后面的条件要加 ( ) ,即小括号并转义。


    • 根据文件大小查找:
      -size [+|-]N[bkMG]
      寻找/下文件大小超过10M的所有文件:
    [root@test tmp]# find / -size +10M
    

    • 根据时间戳:
      访问时间、修改时间、改变时间
      天:
      -atime [+|-]N
      -mtime [+|-]N
      -ctime [+|-]N

        -atime +7 : 表示7天内
      


      -amin [+|-]N
      -mmin [+|-]N
      -cmin [+|-]N


    • 根据权限进行查找:
      • -perm [+|-]MODE
        • MODE : 精确查找
          /MODE : 任何一类(u g o )对象的权限中只要能有一位匹配即可
          -MODE : 每一类对象都必须同时拥有为其制定的权限标准

    处理动作

    -print: 默认处理动作,显示至屏幕上
    -ls: 类似于对查找到的文件执行 ls -l 命令
    -delete: 删除查找到的文件
    -fls /path/to/somefile : 查找到的所有文件的长格式信息保存至指定文件中 
    
    
    -ok COMMAND {} \ : 
    	对查找到的每个文件执行由COMMAND指定的命令 
    	{}: 用于引用查找到的文件名称自身
    	交互式,每个文件执行命令前会让用户确定
    
    -exec COMMAND {} \: 
    	对查找到的每个文件执行由COMMAND指定的命令 
    	{}: 用于引用查找到的文件名称自身
    

    实例1: 对/tmp目录下所有属主为root用户的文件修改其属主为zhangsan

    [root@test tmp]# find /tmp -user root -ok chown zhangsan: {} \;
    

    这里 {} \ 之间要有空格


    实例2: 对/tmp目录下所有属主为zhangsan用户或者属主为zhangsan的文件修改其为root:root

    [root@test tmp]# find /tmp -user zhangsan -o -group zhangsan -exec chown root:root {} \;
    

    注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;
    另一种 方式可规避此问题 find | xargs COMMAND
    等同于上面实例2的操作
    [root@test tmp]# find /tmp -user zhangsan -o -group zhangsan | xargs chown root:root

    练习题:

    1. 查找/var目录下属主为root,且属组为mail的所有文件或目录
    2. 查找/usr目录下不属于root,bin或Hadoop的所有文件或目录
    3. 查找/etc目录下周一内容曾被访问过的文件或目录
    4. 查找当前系统上没有属主或属组,且近一周内曾被访问过的文件或目录
    5. 查找/etc目录下大于1M且类型为普通文件的所有文件或目录
    6. 查找/etc目录下所有用户都没有写权限的文件
    7. 查找/etc目录下至少一类用户没有执行权限的文件
    8. 查找/etc/init.d目录下,所有用户都执行权限,且其它用户写权限的文件
    展开全文
  • Linux Vi编辑器和find命令的使用

    千次阅读 2018-12-25 23:06:18
    vi 编辑器 Linux:使用文本文件来保存配置文件 文本编辑器:ASCII文件 ...编辑模式:键盘操作通常被解析为编辑命令: 输入模式: 末行模式:vim的内置的命令行接口,执行vim内置命令 编辑模式–&gt;输入模...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    ◆ 文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln; ◆ 系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab; ◆ 网络操作命令:ifconfig、ip、ping、...
  • 初学Ubuntu:Linux中find命令细节详解

    千次阅读 2018-06-04 22:16:30
    find命令特点:文件查找,实时查找,速度略慢,精确匹配 使用格式:# find [options] [查找路径] [查找条件] [处理动作] 查找路径:默认为当前目录 查找条件:默认为查找指定路径下的所有文件 处理动作:默认为...
  • [查找路径] [查找条件] [处理动作]    查找路径:指定具体目标路径;默认为当前目录  查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下所有文件  ...
  • linux中find命令详解

    万次阅读 2019-01-12 19:23:41
    find命令 :  特点: 查找速度慢,实时查找,精确查找 格式:find [OPTION]... [查找路径] [查找条件] [处理动作] 查找路径:默认为当前目录 查找条件:默认为查找所有文件 处理动作:默认是输出到屏幕...
  • Linux指令篇 - find命令

    2019-08-24 15:36:04
    find . \( -name "*.txt" -o -name "*.pdf" \) -print 演示结果: 2. 正则方式查找.txt和pdf find . -regex ".*(.txt|.pdf)$" -iregex: 忽略大小写的正则 3 . 否定参数 查找所有非txt文本 find . ! -...
  • Linux find命令

    2016-08-24 10:24:15
    Linux下find命令在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了很多的查找条件,功能很强大,所以它的命令也很多,其中大部分选项是值得我们花时间了解的,即使系统中有很多的文件,但find命令在该...
  • SHELL | find命令

    2020-11-19 14:13:53
    这时就需要用到查找命令了,find命令比locate命令的功能要齐全而且要好用的多,所以博主只在这里接受find命令的用法。 命令格式 find [option]...[查找路径][查找条件][处理动作] 查找路径:默认为当前目录,...
  • find命令 1.说明: grep命令是Linux系统中的文本搜索工具,可以使用正则表达式搜索,也可以指定搜索结果的行数内容。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。...
  • locate、find命令使用总结

    千次阅读 2017-04-20 16:52:07
    尤其是find命令常用于日常工作中如安装完某个软件之后要查看这些软件的安装配置路径,或是需要按指定条件直接查找我们需要操作的文件。因此更需要熟练掌握此命令。 二、用法详解 locate:模糊查找命令,查找的是li
  • find命令及文件包的安装

    千次阅读 2017-05-12 22:58:55
    基本命令2: date: date --help 846 date -s "20091010 10:10:10" 847 date -s "11:11 2010-09-09" 848 date -s "11:11 2010-09-09" +%F 849 date -s "11:11 2010-09-09" "+%F %X" [root@node1 test]# date +%F
  • Linux下文件查找常用命令有locate和find命令。locate命令不是实时查找,所以查找的结果不精确,但查找速度很快。因为它查找的不是目录,而是一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。...
  • linux find name命令详解

    千次阅读 2020-10-28 11:12:29
    find命令用来在指定目录下查找文件的命令,和locate不同,find命令是实时精确查找,不做模糊匹配,但是可以使用通配符查找,相对更精确。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不...
  • 一、时间参数stat命令可以获取文件的三个时间,如下图所示,他们分别是Access,Modify和Change,那么他们分别代表什么意思呢? access time:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间 modify time...
  • Linux下find命令的一般用法。

    千次阅读 2019-05-05 17:27:40
    在linux中,查找文件一般使用locate和find,locate是根据事先构建好的缩影库或者数据库中的数据查找文件名(非实时,速度快,模糊查找),而find作为一个实时查找命令,通过遍历指定起始路径下文件系统层级结构完成...
  • 常用命令有 locate 和 find ,下面针对于这两个命令进行详细说明。 locate locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就...
  • 使用find命令进行查询拷贝

    千次阅读 2016-07-04 14:09:22
    但这样做的效率很低,突然想起了很久之前面试的一次面试,面试官让我用1条命令查找删除指定的有规律的文件,当时使用的是find / -name *** | xagr rm -rf ,但被面试官指出这个2条命令,中间使用了管道来连接,实质...
  • ##vim的常用功能和find 查找命令##

    千次阅读 2019-03-27 22:13:23
    命令模式 浏览文件,临时更改vim的工作方式,对字符批量处理 插入模式 对文件内容进行编辑 退出模式 退出vim程序 ###2,命令模式### 1) 调整vim的工作方式 在vim程序中 :set 调整参数 示例: :set ...
  • linux精确查找——find命令

    千次阅读 2018-03-19 16:27:55
    find命令是一种精确查找工具,可以查找精确查找文件的位置,单相对于locate命令的模糊查找来说,速度要慢了许多。find - search for files in a directory hierarchyfind [path...] [expression] path:是指文件的...
  • linux find命令及特殊权限

    千次阅读 2017-03-31 22:18:51
    01find命令   文件查找 在文件系统上查找符合条件的文件 文件查找:local find 非实时查找(数据库查找): local 实时查找: find   local: 依赖于构建的索引: 索引的构建是在系统较为空闲时自动进行(周期性任务) ...
  • Linux下查找文件的命令有两个:locate 和 find 首先说下locate,locate这个命令是对其生成的数据库进行遍历(生成数据库的命令:updatedb),这一特性决定了用locate查找文件速度很快,但是locate命令只能对文件...
  • 但是 find 命令是直接在硬盘中进行搜索的,如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大。所以,在使用 find 命令搜索时,不要指定过大的搜索范围。 find 命令的基本信息如下: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,470
精华内容 18,588
关键字:

find命令动作