精华内容
下载资源
问答
  • Linux find 命令

    万次阅读 2010-10-13 11:12:00
    find 命令linux中是很常用到的一个查找命令,它的功能非常地强大。可以结合正则匹配来搜索系统中的指定的内容,以下我就记录一下这个find常用到的一些用法   首先我们来看看find的总体用法 ...

    find 命令在linux中是很常用到的一个查找命令,它的功能非常地强大。可以结合正则匹配来搜索系统中的指定的内容,以下我就记录一下这个find常用到的一些用法
       
    find 语法:find   path   -option   [   -print ]   [ -exec   -ok   command ]   {}  \;

    参数:

    path: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录

    -option:  find中的一些属性值,常用的有-name, -type, -mtime, -ctime, -atime, -user, -group, -nouser, -nogroup, -perm等

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

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

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


    例: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               #查更改时间比f1新但比f2旧的文件


    -type    b/d/c/p/l/f         #查是块设备、目录、字符设备、管道、符号链接、普通文件

    -size      n[c]                 #查长度为n块[或n字节]的文件

    -depth                          #使查找在进入子目录前先行查找完本目录(-maxdepth/-mindepth n)

    -fstype                          #查更改时间比f1新但比f2旧的文件


    -mount                       #查文件时不跨越文件系统mount点

    -follow                        #如果遇到符号链接文件,就跟踪链接所指的文件

    -cpio                          #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到

    -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

    drwxr-xr-x  2 homer homer  4096 Jul 18 21:10 Desktop/


    $
    find   .   -perm -007   -exec ls -l {} \;   #查所有用户都可读写执行的文件(同-perm 777)


    $
    find   . -type d   -print   #查目录(-type d

    drwxr-xr-x  2 homer homer  4096 Jul 18 21:10 Desktop/


    $find   .   !   -type   d   -print   #查目录(-type d


    $
    find   .   -type l  -print       #查链接文件(-type l

    lrwxrwxrwx 1 homer homer 21 Jul 20 16:03 ./ANDROID_SOURCE/.repo/manifest.xml -> manifests/default.xml


    $find   .   -size   +1000000c   -print        #查长度大于1Mb的文件

    -rw-r--r-- 1 homer homer 12540164 Sep  4  2012 ./android-ndk-r8e/samples/native-media/NativeMedia.ts


    $find   .   -size   100c         -print       # 查长度为100c的文件


    $find   .   -size   +10   -print              #查长度超过期作废10块的文件(1块=512字节)


    $find   /etc   home   apps    -depth   -print   | cpio   -ivcdC65536   -o   /dev/rmt0


    $sudo find   /etc -name "passwd*"   -exec grep   "homer"   {}   \;   #看是否存在"homer"用户

    homer:x:1000:1000:homer,,,:/home/homer:/bin/bash
    homer:x:1000:1000:homer,,,:/home/homer:/bin/bash


    $find . -name "test123*"   | xargs file

    ./test123.txt: ASCII text


    $find   . -name "test123*"   |   xargs   echo    "" > /tmp/core.log   #匹配文件test123内容输出到文件 /tmp/core.log

    homer@ubuntu:~$ cat /tmp/core.log 
     ./test123.txt


    $find   . -name "test123*"   | xargs   chmod   o-w     #匹配文件test123的other组(o)删除写权限(-w)

    homer@ubuntu:~$ ll test123.txt 
    -rwxrwxrwx 1 homer homer 4 Jul 20 16:48 test123.txt*
    homer@ubuntu:~$ find   . -name "test123*"   | xargs   chmod   o-w
    homer@ubuntu:~$ ll test123.txt 
    -rwxrwxr-x 1 homer homer 4 Jul 20 16:48 test123.txt*

    ======================================================

    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   -maxdepth   4    -name tmp.txt        列出/home内的tmp.txt 查时深度最多为3层
    find   /home   -mindepth   3     -name tmp.txt        从第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    /   -mmin   -5        # 查找在系统中最后5分钟里修改过的文件
    find    /   -mtime   -1       # 查找在系统中最后24小时里修改过的文件


    find    /   -empty             # 查找在系统中为空的文件或者文件夹
    find    /   -group   cat      # 查找在系统中属于 groupcat的文件
    find    /   -nouser            # 查找在系统中属于作废用户的文件
    find    /   -user    fred      # 查找在系统中属于FRED这个用户的文件


    查当前目录下的所有普通文件
    # find . -type f -exec ls -l {} \; 
    -rw-r–r–    1 root      root         34928 2003-02-25   ./conf/httpd.conf 
    -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 
    注: 查当前目录下的所有普通文件,并在 -exec 选项中使用 ls -l 命令将它们列出


    在/logs目录中查找更改时间在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}'
    homer tty7
    homer pts/0
    homer pts/1


    awk—grep—sed

    [root@book class]# df   -k |   awk '{print $1}' |   grep   -v   'none' |   sed   s"/\/dev\///g"
    Filesystem
    sda1
    udev
    tmpfs

    [root@book class]# df   -k |   awk '{print $1}' |   grep   -v   'none' 

    Filesystem
    /dev/sda1
    udev
    tmpfs


    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 ‘;’


    5) 如果有特殊文件,可以用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 实例

    在/usr/linux中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR",最后打印出所有包含"SYSCALL_VECTOR"的文件名,有以下几种方法实现
    1)find /usr/linux -name "*.h" | xargs -n50 grep SYSCALL_VECTOR
    2)grep SYSCALL_VECTOR /usr/linux/*.h | cut -d’:’ -f1 | uniq > filename
    3)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 的提示模式,它只是多了一个确认操作的步骤
    -007是指查找所有用户(other)都可读、写、执行的文件


    find -name ".*" -perm -007 和 find -name ".*" -perm 777 有区别吗?

    -007是指查找所有用户都可读、写、执行的文件
    -007是查找含其它用户(不同组,非属主)可读、写、执行的文件,并不一定要同组可读写,-是指最少权限为007.

     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点
    1) 创建一个脚本judgetime,内容如下:
    ls -l $*|awk ‘{split($8,hour,":");if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}’
    2)到要查找的目录下,运行
    find ./ -name "*" -exec judgetime {} \;
    注意时间格式为24小时制。


    如果我要精确到分钟呢

    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天是怎么计算的。

    问题2、对于"ll |cut -f 1" 这个命令我是不是用错了,我只想取出 ll 中列出的文件名,但用cut -f 命令做不到 ,我只好换用 ll |cut -c 59- 这种方式得到我要的文件名,but it’s a pool idear !我也试过用awk ,好像也不对,看看大家可不可以给我一些小小的提醒,TKS SO MUCH

    问题3、如何改变 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
    然后
    $ find . -newer test -print
    .
    ./.sh_history
    $ ls -l .sh_history
    -rw——- 1 dba other 154 Aug 20 17:39 .sh_history

    用touch可以写出你想要的任何时间的文件,然后用-newer ,! -newer选项即可成功。

    1.ctime含inode信息修改的时间.mtime只指文件内容建立或修改的时间.
    2 不会.
    3.这些信息应该是存在文件系统的超级块里.


    我查了书 -ctime 是指 inode 的改变(或称文件的状态改变).
    请问 inode 存了哪些信息 ?
    做了些小测试,-mtime 改, -ctime 一定也改.
    改文件名, -ctime 也会改.
    谁能回答 i-node 存了哪些东西 ?

    vi /usr/include/sys/inode.h

    班主,我不能 access /usr/include/sys/inode.h .
    摘书如下:
    Directories contain directory entries. Each entry contains a file or subdirectory name and an index node reference number (i-node number). To increase speed and enhance use of disk space, the data in a file is stored at various locations in the computer’s memory. The i-node contains the addresses used to locate all the scattered blocks of data associated with a file. The i-node also records other information about the file including time of modification and access, access modes, number of links, file owner, and file type.
    可我发现 -atime 改了, -ctime 还没改. why ?
    ( 我先 cat 一个 ASCII 文件,再用 -atime -1 有它用 -ctime -1 居然没有它.)
    着岂不跟 inode 信息改变, ctime 就改矛盾吗?

    我不同意你贴出来的那段文章,正如我提到的那样,atime,ctime,mtime是放到超级块里,在sco unix下是一种叫stat的结构.(stat_32),不同的系统文件系统可能不同.
    sco 下inode的结构如下:

    typedef struct inode
    {
    struct inode *i_forw; /* inode hash chain */
    struct inode *i_back; /* ‘’ */
    struct inode *av_forw; /* freelist chain */
    struct inode *av_back; /* ‘’ */
    int *i_fsptr; /* "typeless" pointer to fs dependent */
    ino32_t i_number; /* i number, 1-to-1 with dev address */
    ushort i_ftype; /* file type = IFDIR, IFREG, etc. */
    short i_fstyp; /* File system type */
    off_t i_size; /* size of file */
    ushort i_uid; /* owner */
    ushort i_gid; /* group of owner */
    ushort i_flag;
    ushort i_want; /* i_flag extension to avoid MP races */
    ushort i_count; /* reference count */
    short i_nlink; /* directory entries */
    dev_t i_rdev; /* Raw device number */
    #define i_namtype i_rdev /* i_ftype==IFNAM subtype */
    dev_t i_dev; /* device where inode resides */
    struct mount *i_mton;/* ptr to mount table entry that */
    /* this directory is mounted on */
    struct region *i_rp; /* ptr to shared region if any */
    struct stdata *i_sp; /* ptr to associated stream */
    struct iisem *isem; /* ptr to XENIX semaphores */
    struct iisd *isd; /* ptr to XENIX shared data */
    } i_un;

    #define i_mnton i_un.i_mton /* i_ftype==IFDIR IMOUNT */
    #define i_rptr i_un.i_rp /* i_ftype==IFREG || i_ftype==IFBLK */
    #define i_sptr i_un.i_sp /* i_ftype==IFCHR || i_ftype==IFIFO */
    #define i_sem i_un.isem /* i_ftype==IFNAM && i_namtype==IFSEM */
    #define i_sd i_un.isd /* i_ftype==IFNAM && i_namtype==IFSHD */
    
    struct fstypsw *i_fstypp; /* ptr to file system switch FSPTR */
    long *i_filocks; /* pointer to filock (structure) list */
    unsigned long i_mappages; /* number of pages currently cached */
    unsigned long i_vcode; /* read-ahead block save (NFS) */
    short i_wcnt; /* write open count or ITEXT count */
    struct lockb i_cilock; /* tas to synchronize i_flag changes */
    ushort i_rdlocks; /* count of non-exclusive lockers */
    } inode_t;

    所以,访问一个文件不能改变inode信息.
    使用chown, chgrp, chmod命令可以很好的比较mtime和ctime
    chown改变一个文件的属主,用ctime可以找到,用mtime便找不到.
    试试看.

    多谢斑竹! 我是在 Solaris 上面试的.我是对 -ctime 不明白.
    试的结果如下:
    修改文件,-mtime 改了, -ctime 也会改.
    访问文件,-atime 改了, -ctime 没变.
    chown, chgrp, chmod,mv, 都会使 -ctime 改变,但不影响 -atime 和 -mtime.
    touch 可以改 -mtime and/or -atime,但 touch -a 只改访问时间时,-ctime也改了.
    touch -m 改修改时间时,-ctime当然也改了.
    好象还有别的很多东西可以令 -ctime 改变, 搞不清楚.
    有什么方法可以显示 -mtime,atime,ctime 吗?
    可以用 -ctime 来实现对目录的增量文件进行备份或 transfer 吗 ?
    多谢!

    没有什么工具显示,(可能是俺不知道)
    把下面程序里的st_mtime换成st_ctime,或st_atime便可以得到你要的了.

    #include
    int
    main (int argc, char **argv)
    {
    struct stat buf;
    char date[80];
    char fname[80];
    printf("Enter filename (with full path) to check mtime : ");
    scanf("%s",fname);
    stat(fname, &buf);
    printf ("mtime (in sec) of %s = %ld\n", fname, buf.st_mtime);
    strcpy(date, ctime((time_t *)&(buf.st_mtime)));
    printf ("mtime (in date) of %s = %s\n", fname, date);
    }

    至于文件备份,有什么不可以的么?

    mtime ls -l 最近修改文件内容的时间
    atime ls -lu 最近访问文件的时间
    ctime ls -li 最近文件有所改变的状态 ,如文件修改,属性\属主 改变 ,节点 ,链接变化等 ,应该是不拘泥只是时间前后的改变

    俺看了ls的帮助,以为只是按ctime或atime排序,显示的时间还是mtime.

    仔细比较了一下,ayhan说的是对的.谢谢ayhan.

    多谢 ahyan 提示 ! 我在 Solaris 上试过如下:
    mtime 用 ls -l 看到
    atime 用 ls -lu 看到
    ctime 用 ls -lc 看到. (ls -li 只有 inode number)
    摘书如下:
    -c Uses time of last modification of the i-node (file
    created, mode changed, and so forth) for sorting (-t)
    or printing (-l or -n).
    -u Uses time of last access instead of last modification
    for sorting (with the -t option) or printing (with the
    -l option).
    -i For each file, prints the i-node number in the first
    column of the report.



    参考推荐:

    Linux下which、whereis、locate、find 区别

    Linux中find常见用法示例

    Linux xargs命令推荐


    展开全文
  • Linux find命令

    千次阅读 2013-08-20 13:54:26
    每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方... 可是使用Linux的用户就没有那么幸运了,
      每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。

      可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻烦的事情。毕竟在Linux中需要我们使用专用的“查找”命令来寻找在硬盘上的文件。Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到。Linux中查找文件的命令通常为“find”命令,“find”命令能帮助我们在使用,管理Linux的日常事务中方便的查找出我们需要的文件。对于Linux新手来说,“find”命令也是了解和学习Linux文件特点的方法。因为Linux发行版本繁多,版本升级很快,在Linux书籍上往往写明某个配置文件的所在位置,往往Linux新手按图索骥还是不能找到。比如说REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬盘位置和文件目录就有了很大的改变,如果不学会使用“find”命令,那么在成千上万的Linux文件中要找到其中的一个配置文件是相当困难的,笔者在没有精通“find”命令之前就吃过这样的苦头。好,下面就详细为大家介绍强大的“find”命令的全部使用方法和用途。

      通过文件名查找法:

      这个方法说起来就和在WINDOWS下查找文件一样容易理解了。如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,那么使用“find”命令来查找它就不能给你留下深刻的印象,毕竟“find”命令的强大功能不止这个。如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:

      find / -name httpd.conf 

      这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
    etc/httpd/conf/httpd.conf 

      这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。
      如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。

      无错误查找技巧:

      在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入
    find / -name access_log 2>/dev/null 

      这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。
     在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf 就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。

      根据部分文件名查找方法:
      这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:

      find /etc -name '*srm*' 

      这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:

      find/etc -name 'srm*' 

      这是只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。

      根据文件的特征查询方法:

      如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的"搜索"功能是基本相同的。在微软的"搜索"中WINDOWS中的"搜索助理"使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在Internet 上搜索更加容易。"搜索助理"还包括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用"搜索助理"时,用户可以指定多个搜索标准。例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的打印机。

      例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询find / -size 1500c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。例如我们输入find/ -size +10000000c 这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“ find"命令后系统所要作出的查找动作,从中我们很容易看出在Linux中使用“find"命令的方式是很多的,“ find"命令查找文件只要灵活应用,丝毫不必在WINDOWS中查找能力差。

      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命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。
      -amin n
      查找系统中最后N分钟访问的文件
      -atime n
      查找系统中最后n*24小时访问的文件
      -cmin n
      查找系统中最后N分钟被改变状态的文件
      -ctime n
      查找系统中最后n*24小时被改变状态的文件
      -empty
      查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
      -false
      查找系统中总是错误的文件
      -fstype type
      查找系统中存在于指定文件系统的文件,例如:ext2 .
      -gid n
      查找系统中文件数字组 ID 为 n的文件
      -group gname
      查找系统中文件属于gnam文件组,并且指定组和ID的文件
     Find命令的控制选项说明:
      Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的最基本,最常用的find命令的控制选项及其用法。 
      选项
      用途描述
      -daystart
      .测试系统从今天开始24小时以内的文件,用法类似-amin
      -depth
      使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
      -follow
      遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
      -help
      显示命令摘要
      -maxdepth levels
      在某个层次的目录中按照递减方法查找
      -mount
      不在文件系统目录中查找, 用法类似 -xdev.
      -noleaf
      禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找
      -version
      打印版本数字
      

      使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,否则一般情况下find命令将忽略通配符链接方式进行文件查找。

      -maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如下命令

      find . -maxdepth 2 -name fred 

      假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找很容易成功。假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找成功。

      使用混合查找方式查找文件
      find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来组合成一个混合的查找方式。
      find /tmp -size +10000000c -and -mtime +2 

      学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示“与”和“或”的关系。在Linux系统的查找命令中一样通用。
      还有这样的例子,
      find / -user fred -or -user george 

      我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。
      在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于panda的文件,使用一个简单的
      find /tmp ! -user panda 
      命令就可以解决了。很简单。

      查找并显示文件的方法
      查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。

      find / -name "httpd.conf" -ls 

      系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。
      12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

      下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法
      选项
      用途描述
      -exec command;
      查找并执行命令
      -fprint file
      打印文件完整文件名
      -fprint0 file
      打印文件完整文件名包括空的文件
      -fprintf file format
      打印文件格式
      -ok command;
      给用户命令执行操作,根据用户的Y 确认输入执行
      -printf format
      打印文件格式
      -ls
      打印同种文件格式的文件.


      总结:到这里为止我们已经学习了这名多关于find命令的使用方法,也列出了很多常用的find命令的选项,如果我们能熟练掌握在Linux中find命令的使用方法,那么在Linux中查找文件也不是一件困难的事情。
    展开全文
  • Linux find命令详解

    千次阅读 2019-05-30 11:05:41
    Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行...

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

    语法:

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

    path :  find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

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

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

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

     

    参数说明:

    -amin n :在过去n分钟内被读取过

    -anewer file :比文件file更晚被读取过的文件

    -atime n :在过去n天内被读取过的文件

    -cmin n :在过去n分钟内被修改过

    -cnewer file :比文件file更新的文件

    -ctime n :在过去n天内被修改过的文件

    注:以上+n表示n以前,-n 表示n以内

    -empty :空的文件-gid n or -groupname : gid是n或是group名称是name

    -ipath p, -path p :路径名称符合p的文件,ipath会忽略大小写

    -name name, -iname name :文件名称符合name的文件。iname会忽略大小写

    -size n :文件大小是n,单位,b代表512位元组的区块,c表示字元数,k表示kilo bytes。

    -type c :文件类型是c的文件。

    d:目录

    • c:字型装置文件
    • b:区块装置文件
    • p:具名贮列
    • f:一般文件
    • l:符号连结
    • s: socket

    -pid n : process id是n的文件

    你可以使用( )将运算式分隔,并使用下列运算。

    exp1 -and exp2

    ! expr

    -not expr

    exp1 -or exp2

    exp1, exp2

     

    实例:

    将目前目录及其子目录下所有延伸档名是c的文件列出来。

    # find . -name "*.c"

    将目前目录其其下子目录中所有一般文件列出

    # find . -type f

    将目前目录及其子目录下所有最近20天内更新过的文件列出

    # find . -ctime -20

    查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

    # find /var/log -type f -mtime +7 -ok rm {}\;

    查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

    # find . -type f -perm 644 -exec ls -l {}\;

    为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

    # find / -type f -size 0 -exec ls -l {} \;

    观注快乐程序员公众号,每日分享一点小知识。爱编程,爱生活!

    展开全文
  • Linux Find命令

    千次阅读 2007-04-12 21:23:00
    每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的 文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘 中的哪个... 可是使用Linux的用户就没有那么幸运了,在
    每一种操作系统都是由成千上万个不同种类的文件所组成的。其中有系统本身自带的 
    文件,用户自己的文件,还有共享文件等等。我们有时候经常忘记某份文件放在硬盘
    中的哪个地方。在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只
    要在桌面上点击“开始”-“搜索”中就能按照各种方式在本地硬盘上,局域网络,甚至
    在INTERNET上查找各种文件,文档。

    可是使用Linux的用户就没有那么幸运了,在Linux上查找某个文件确实是一件比较麻
    烦的事情。毕竟在Linux中需要我们使用专用的“查找”命令来寻找在硬盘上的文件。
    Linux下的文件表达格式非常复杂,不象WINDOWS,DOS下都是统一的AAAAAAA.BBB格式
    那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易
    查找到。Linux中查找文件的命令通常为“find”命令,“find”命令能帮助我们在使用,
    管理Linux的日常事务中方便的查找出我们需要的文件。对于Linux新手来说,“find”
    命令也是了解和学习Linux文件特点的方法。因为Linux发行版本繁多,版本升级很快,
    在Linux书籍上往往写明某个配置文件的所在位置,往往Linux新手按图索骥还是不能
    找到。比如说REDHAT Linux 7.O和REDHAT Linux 7.1中有些重要的配置文件所在的硬
    盘位置和文件目录就有了很大的改变,如果不学会使用“find”命令,那么在成千上万
    的Linux文件中要找到其中的一个配置文件是相当困难的,笔者在没有精通“find”命
    令之前就吃过这样的苦头。好,下面就详细为大家介绍强大的“find”命令的全部使用
    方法和用途。

    通过文件名查找法:

    这个方法说起来就和在WINDOWS下查找文件一样容易理解了。如果你把这个文件放在
    单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,那么使用“find”
    命令来查找它就不能给你留下深刻的印象,毕竟“find”命令的强大功能不止这个。如
    果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的
    文件夹里。举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录下,甚至
    在系统的某个地方也不知道,则这是可以使用如下命令:

    find / -name httpd.conf

    这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求
    系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会
    在计算机屏幕上显示出查找结果列表:

    etc/httpd/conf/httpd.conf

    这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。

    如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行
    find/ -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时
    只要你安装了Apache Web服务器,然后再使用find / -name httpd.conf就能找到这
    个配置文件了。

    无错误查找技巧:

    在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理
    员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Linux系
    统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有
    权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些
    文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到
    你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找
    文件,输入
    find / -name access_log 2>/dev/null

    这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误
    的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输
    送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这
    样查询到的错误信息将被转移了,不会再显示了。

    在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中
    查找某个文件就要花费相当长的一段时间,特别是大型Linux系统和容量较大的硬盘,
    文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,
    那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name httpd.conf
    就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。
    这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Linux系
    统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只
    在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的
    速度就相应要快很多了。

    根据部分文件名查找方法:

    这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Linux中根据部分文
    件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个
    文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现
    的,输入:


    find /etc -name '*srm*'

    这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,
    比如 absrmyz, tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件
    是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:

    find/etc -name 'srm*'

    这是只有像srmyz 这样的文件才被查找出来,象absrmyz或者 absrm这样的文件都不符
    合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。

    根据文件的特征查询方法:

    如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和
    WINDOWS系统中的"搜索"功能是基本相同的。在微软的"搜索"中WINDOWS中的"搜索助理"
    使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在
    Internet 上搜索更加容易。"搜索助理"还包括一个索引服务,该服务维护了计算机中
    所有文件的索引,使得搜索速度更快。使用"搜索助理"时,用户可以指定多个搜索标准。
    例如,用户可以按名称、类型及大小搜索文件和文件夹。用户甚至可以搜索包含特定文
    本的文件。如果用户正使用 Active Directory,这时还可以搜索带有特定名称或位置的
    打印机。

    例如我们知道一个Linux文件大小为1,500 bytes,那么我们可是使用如下命令来查询
    find / -size 1500c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果
    我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式来解决。
    例如我们输入find/ -size +10000000c 这个命令,则标明我们指定系统在根目录中查找
    出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定
    大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在
    Linux使用不同“ find"命令后系统所要作出的查找动作,从中我们很容易看出在Linux
    中使用“find"命令的方式是很多的,“ find"命令查找文件只要灵活应用,丝毫不必在
    WINDOWS中查找能力差。


    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命令所可以指定文件的特征进行查找的部分条件。在这里并没有
    列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。
      -amin n
      查找系统中最后N分钟访问的文件
      -atime n
      查找系统中最后n*24小时访问的文件
      -cmin n
      查找系统中最后N分钟被改变状态的文件
      -ctime n
      查找系统中最后n*24小时被改变状态的文件
      -empty
      查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
      -false
      查找系统中总是错误的文件
      -fstype type
      查找系统中存在于指定文件系统的文件,例如:ext2 .
      -gid n
      查找系统中文件数字组 ID 为 n的文件
      -group gname
      查找系统中文件属于gnam文件组,并且指定组和ID的文件

    Find命令的控制选项说明:

      Find命令也提供给用户一些特有的选项来控制查找操作。下表就是我们总结出的
    最基本,最常用的find命令的控制选项及其用法。
      选项
      用途描述
      -daystart
      .测试系统从今天开始24小时以内的文件,用法类似-amin
      -depth
      使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
      -follow
      遵循通配符链接方式查找; 另外,也可忽略通配符链接方式查询
      -help
      显示命令摘要
      -maxdepth levels
      在某个层次的目录中按照递减方法查找
      -mount
      不在文件系统目录中查找, 用法类似 -xdev.
      -noleaf
      禁止在非UNUX文件系统,MS-DOS系统,CD-ROM文件系统中进行最优化查找
      -version
      打印版本数字

    使用-follow选项后,find命令则遵循通配符链接方式进行查找,除非你指定这个选项,
    否则一般情况下find命令将忽略通配符链接方式进行文件查找。

    -maxdepth选项的作用就是限制find命令在目录中按照递减方式查找文件的时候搜索文

    件超过某个级别或者搜索过多的目录,这样导致查找速度变慢,查找花费的时间过多。
    例如,我们要在当前(.)目录技巧子目录中查找一个名叫fred的文件,我们可以使用如
    下命令

    find . -maxdepth 2 -name fred

    假如这个fred文件在./sub1/fred目录中,那么这个命令就会直接定位这个文件,查找
    很容易成功。假如,这个文件在./sub1/sub2/fred目录中,那么这个命令就无法查找
    到。因为前面已经给find命令在目录中最大的查询目录级别为2,只能查找2层目录下的
    文件。这样做的目的就是为了让find命令更加精确的定位文件,如果你已经知道了某个
    文件大概所在的文件目录级数,那么加入-maxdepth n 就很快的能在指定目录中查找
    成功。

    使用混合查找方式查找文件

    find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于100000000字
    节并且在48小时内修改的某个文件,我们可以使用-and 来把两个查找选项链接起来
    组合成一个混合的查找方式。

    find /tmp -size +10000000c -and -mtime +2

    学习过计算机语言的朋友都知道,在计算机语言里,使用and ,or 分别表示“与”和“或”
    的关系。在Linux系统的查找命令中一样通用。

    还有这样的例子,

    find / -user fred -or -user george

    我们可以解释为在/tmp目录中查找属于fred或者george这两个用户的文件。

    在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有
    不属于panda的文件,使用一个简单的

    find /tmp ! -user panda

    命令就可以解决了。很简单。

    查找并显示文件的方法

    查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果
    我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以
    把这两个命令结合起来使用。

    find / -name "httpd.conf" -ls

    系统查找到httpd.conf文件后立即在屏幕上显示httpd.conf文件信息。

    12063 34 -rw-r--r-- 1 root root 33545 Dec 30 15:36 /etc/httpd/conf/httpd.conf

    下面的表格就是一些常用的查找文件并显示文件信息的参数和使用方法

    选项
      用途描述
      -exec command;
      查找并执行命令
      -fprint file
      打印文件完整文件名
      -fprint0 file
      打印文件完整文件名包括空的文件
      -fprintf file format
      打印文件格式
      -ok command;
      给用户命令执行操作,根据用户的Y 确认输入执行
      -printf format
      打印文件格式
      -ls
      打印同种文件格式的文件.

    总结:到这里为止我们已经学习了这名多关于find命令的使用方法,也列出了很多常
    用的find命令的选项,如果我们能熟练掌握在Linux中find命令的使用方法,那么在
    Linux中查找文件也不是一件困难的事情。  
    展开全文
  • linux find命令

    千次阅读 2006-11-15 12:23:00
    1 【 转载】Linux中文件查找技术大全 因为要找个东
  • Linux find命令的几个备忘

    千次阅读 2015-10-12 16:03:02
    Linux find命令的几个备忘下面的内容只是我在使用Linuxfind命令时候遇到的几个小问题,在这里做一个记录,更详细的find命令的使用参考man手册。1. -name | -path中的pattern是精准匹配首先我们看一下-name的几个...
  • Linux find 命令使用小技巧一则

    千次阅读 2015-11-23 09:30:05
    Linux find 命令使用小技巧一则今天需要清理一下原来每日构建产生的一些用来存放包的目录,这些目录名字是按照一定规则存放,比如:...查看了一下find命令说明,可以 * 使用 “-type d” 参数来只查找目录,忽略文件。
  • Linux find 命令如何抑制权限不足的文件不显示 普通用户在使用 find 命令时经常会看到提示 “权限不够” ,并将这一串路径输出出来,往往是一大串,这会妨碍我们查找真正需要的信息,甚至在root超级管理员用户也可能...
  • linux find 命令查找文件和文件夹 查找目录:find /(查找范围) -name '查找关键字' -type d 查找文件:find /(查找...如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查...
  • linux find命令详解

    万次阅读 2018-04-25 23:46:19
    ”-a “并且,“ -o ” 或,“ –not”否find -name *history //查找当前目录及子目录下所有以history结尾的文件find -name mysql* //查找当前目录及子目录下所有以mysql开头的文件find -name mysql* -o -name *...
  • 本文介绍了linux find命令中-print0和xargs中-0用法技巧,一些find命令的使用经验,需要的朋友参考下。 本节内容: linux find命令中-print0和xargs中-0的用法。 默认情况下, find命令每输出一个文件名, 后面...
  • Linux Find 命令精通指南

    千次阅读 2007-03-24 15:23:00
    作者:Sheryl Calish Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至...
  • 文章来源:linux find 命令忽略某个或多个子目录的方法 文章参考:使用find查找文件的时候怎么避开某个文件目录 在linux find 进行查找的时候,有时候需要忽略某些目录不查找,可以使用 -prune 参数来进行过滤,...
  • linux find 命令详解

    千次阅读 2013-01-29 14:43:11
    find命令的参数: pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 -print: find命令将匹配的文件输出到标准输出。 -exec: find命令对匹配的文件执行该参数所给出的shell...
  • Linux find 命令使用

    千次阅读 2013-11-20 18:50:20
    其实,这些功能,Linuxfind命令都是有的。其实,find命令的参数就是用来指明查找条件的。(这些条件参数都是用-开头的)。find 命令可以按文件名(-name),文件的大小(-size)、文件的修改时间(-mtime)、文件的类型...
  • linux find 命令查找文件和文件夹

    万次阅读 2018-04-12 10:21:12
    查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 -print 如果需要更进一步的了解,可以参看Linux命令详解。这里摘抄如下: ·find path -option [ -...
  • 15个实用的Linux find命令示例

    千次阅读 2013-09-27 11:23:55
    除了在一个目录结构下查找文件这种基本的操作,你还可以用...本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。 首先,在你的home目录下面创建下面的空文件,来测试下面的find命令示例。
  • Linux find命令*通配符

    千次阅读 2020-06-12 19:18:48
    上述命令test*不加引号时 shell会自动解析查找当前目录下有没有test开头的文件。 如果有会将test*这个变量转换成所有以test开头的文件。 假如当前目录有test1 test2两个文件,指令就变成了 find ./ -name test1 ...
  • Linux find命令和ls命令带""引号的问题

    千次阅读 2019-08-29 08:38:38
    Linuxfind命令的使用网上有很多资料 实际使用中遇到了如下问题: 请看如下几组命令 a) find . -name abc b) find . -name abc* c) find . -name “abc*” d) find . -name “abc*” -print 除了第一组,其他三组...
  • 除了在一个目录结构下查找文件...本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令。 首先,在你的home目录下面创建下面的空文件,来测试下面的find命令示例。 01 # vim create_sample_files.sh
  • Linux find命令及一些参数

    千次阅读 2018-03-19 13:46:27
    1、参数-depth 的意思是:在处理目录以前首先处理目录下的子内容。...2、参数-exec 把find命令查找到的结果删除,必须由一个 ; 结束,而因为通常 shell 都会对 ; 进行处理,所以用 \; 防止这种情况。 ...
  • linux find命令出现Permission denied后怎么办 ------利用linux黑洞文件/dev/nu
  • Linux find命令用法小结

    万次阅读 2015-11-22 16:29:39
    find命令的格式: find [-path ..] -options [-print -exec -ok] path:要查找的目录路径。 ~ 表示$HOME目录 . 表示当前目录 / 表示根目录 -print :表示将结果输出到标准输出 -exec :对匹配的文件执行该参数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 223,082
精华内容 89,232
关键字:

linuxfind命令

linux 订阅