zoukankan      html  css  js  c++  java
  • find 查找目录下的文件

    1. 命令功能

    find命令用于查到目录下的文件,同时也可以调用其它命令执行相应操作。

    2. 语法格式

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

    find  [-H] [-L] [-P] [-Olevel]  [pathname]  [expression]

    find  [选项]            [ 路径 ]        [操作语句]

    常见用法示例:

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

    3. 使用范例

    1.基础使用范例

    范例1: 在/下查找test.txt文件

    [root@localhost ~]# find / -name "test.txt"

    /root/test.txt

    /home/test.txt

    范例2: 查找指定时间内修改过的文件,查找在/home目录下1天内访问过的文件

    [root@localhost home]# find /home -atime -1 # -atime 表示在多少天访问过;-1:1天内

    /home

    /home/test.txt

    /home/cxf

    /home/cxf/.bash_history

    /home/cxf/ok

    /home/cxf/ok/a

    ....

    范例3: 查找在/home 2天内修改过的文件

    /home/cxf/ok/a/b

    /home/cxf/ok/a/b/c

    /home/cxf/dir2

    /home/cxf/dir2/123.txt

    /home/cxf/.lesshst

    范例4 :用-name指定关键字查找

    [root@localhost home]# find /home -mtime -1 -name "*.txt"

    /home/test.txt

    /home/cxf/dir2/123.txt

    范例5: 利用“!”反向查找

    [root@localhost home]# find /home -type d  #在/home目录下查找目录 –type d表示目录

    /home

    /home/cxf

    /home/cxf/ok

    /home/cxf/ok/a

    /home/cxf/ok/a/b

    /home/cxf/ok/a/b/c

    /home/cxf/dir2

    /home/DIR

    [root@localhost home]# find /home ! -type d   #查找不是目录的文件

    /home/test.txt

    /home/cxf/.bash_history

    /home/cxf/.bash_logout

    /home/cxf/.bashrc

    /home/cxf/.bash_profile

    /home/cxf/dir2/123.txt

    范例6:按照目录或文件的权限来查找文件 -perm

    [root@localhost home]# find /home -perm 755

    /home

    /home/cxf/ok

    /home/cxf/ok/a

    范例7:按大小查找文件

    [root@localhost home]# find . -size +1000c | xargs ls -lhd

    drwxr-xr-x. 4 root root 4.0K Mar 14 22:45 .

    drwx------. 4 cxf  cxf  4.0K Mar 14 00:16 ./cxf

    -rw-------. 1 cxf  cxf  4.4K Mar 14 00:18 ./cxf/.bash_history

    drwxr-xr-x. 2 root root 4.0K Mar 14 00:17 ./cxf/dir2

    范例 8:查找文件时希望忽略某个目录

    准备工作:

    [root@localhost home]# mkdir /home/data/{dir1,dir2,dir3} -p

    [root@localhost home]# ls -l ./data/

    total 12

    drwxr-xr-x. 2 root root 4096 Mar 15 22:01 dir1

    drwxr-xr-x. 2 root root 4096 Mar 15 22:01 dir2

    drwxr-xr-x. 2 root root 4096 Mar 15 22:01 dir3

    [root@localhost home]# ls ./data/{dir1,dir2,dir3}

    ./data/dir1:

    file1.txt

    ./data/dir2:

    file2.txt

    ./data/dir3:

    file3.txt

    查找/home/data目录下的文件,但是需要忽略/home/data/dir2目录

    查到对比:

    1. 查找/home/data目录下的内容

    [root@localhost home]# find /home/data

    /home/data

    /home/data/dir3

    /home/data/dir3/file3.txt

    /home/data/dir2

    /home/data/dir2/file2.txt

    /home/data/dir1

    /home/data/dir1/file1.txt

    1. 忽略/home/data/dir2目录

    [root@localhost home]# find /home/data -path "/home/data/dir2" -prune -o -print

    /home/data

    /home/data/dir3

    /home/data/dir3/file3.txt

    /home/data/dir1

    /home/data/dir1/file1.txt

    参数说明:find /home/data -path "/home/data/dir2" -prune -o –print

    find /home/data 是查找指定目录/home/data下的内容

    -path “/home/data/dir2”是查找/home/data/dir2目录

    -o 表示取并集不在当前指定目录下查找

    -prune表示

    -print将匹配的文件输出到标准输出(默认功能,使用中可省略)

    范例9 :忽略多个目录

    [root@localhost home]# find /home/data ( -path /home/data/dir1 -o   -path  /home/data/dir3 ) -prune -o -print

    /home/data

    /home/data/dir2

    /home/data/dir2/file2.txt

    范例10: 使用user和nouser选项

    [cxf@localhost test]$ ls -lh

    total 4.0K

    drwxrwxr-x. 2 cxf cxf 4.0K Mar 15 22:30 cxf_dir

    -rw-rw-r--. 1 cxf cxf    0 Mar 15 22:30 cxf.txt

    [root@localhost home]# find /home/cxf  -user cxf

    /home/cxf

    /home/cxf/.bash_history

    /home/cxf/test

    /home/cxf/test/cxf.txt

    /home/cxf/test/cxf_dir

    -user 表示有属主的文件;-nouser表示没有属主的文件。-nouser时查找哪些属主账号被删除的文件。 使用-nouser选项不必给出用户。

    其中group和nogroup 与user用法一致。

    范例11: find正则表达式

    -name参数只支持“*”“?”“[]”这三个通配符,碰到复杂要求,就必须用到正则表达式。

    find正则表达式语法如下:

    find –pathname –repextype “type” –regex “pattern”

    示例:

    [root@localhost ~]# find / -regex ".*cxf"

    /var/spool/mail/cxf

    /home/cxf

    范例:12: ls –l命令放在find命令的-exec选项中执行

    [root@localhost home]# find . -type f -exec ls -l {} ;

    -rw-------. 1 cxf cxf 4499 Mar 14 00:18 ./cxf/.bash_history

    -rw-rw-r--. 1 cxf cxf 0 Mar 15 22:30 ./cxf/test/cxf.txt

    -rw-r--r--. 1 cxf cxf 18 May 11  2016 ./cxf/.bash_logout

    -rw-r--r--. 1 cxf cxf 124 May 11  2016 ./cxf/.bashrc

    -rw-r--r--. 1 cxf cxf 176 May 11  2016 ./cxf/.bash_profile

    -rw-------. 1 cxf cxf 51 Mar 13 11:39 ./cxf/.lesshst

    -rw-r--r--. 1 root root 0 Mar 15 22:03 ./data/dir3/file3.txt

    -rw-r--r--. 1 root root 0 Mar 15 22:03 ./data/dir2/file2.txt

    -rw-r--r--. 1 root root 0 Mar 15 22:03 ./data/dir1/file1.txt

    说明:-exec后面跟的是command命令,最后以分号(;)作为结束标志。为了不让分号产生歧义分号前用转义。

    {}的作用:指代前面find命令查找的内容

    上面命令可以用:find . -type f |xargs ls –l 替换

  • 相关阅读:
    【ecshop】 完全清除版权信息
    【ecshop】使用sql 清除测试数据
    Java异常处理:给程序罩一层保险
    想清楚你究竟想成为什么样的人了吗?
    Java集合类的那点通俗的认知
    2019年的第一天,我给自己定了一份读书计划
    Java的内部类真的那么难以理解?
    29岁了还一事无成是人生的常态?
    Java接口的实例应用:致敬我的偶像——何塞·穆里尼奥
    程序员年底众生相
  • 原文地址:https://www.cnblogs.com/joechu/p/8664339.html
Copyright © 2011-2022 走看看