zoukankan      html  css  js  c++  java
  • find 命令

    1. find

    find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。

    find的使用格式如下:

    $ find <指定目录> <指定条件> <指定动作>

      - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

      - <指定条件>: 所要搜索的文件的特征。

      - <指定动作>: 对搜索结果进行特定的处理。

    如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

    find的使用实例:

    $ find . -name 'my*'
    
    搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
    $ find . -name 'my*' -ls
    
    搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
    $ find . -type f -mmin -10
    
    搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。

    2. which

    which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

    which命令的使用实例:

    $ which grep

    find ./ -name “*.txt” | xargs rm    (删除当前目录下所有以txt结尾的文件)    
    find   /home   -size   +512k                查大于512k的文件
    find   /home   -size   -512k               查小于512k的文件
    find   /home   -links   +2                查硬连接数大于2的文件或目录
    find   /home   -perm   0700                查权限为700的文件或目录
    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这个用户的文件

    3. 有如下结构的示例目录 directory

    $ tree directory
    directory
    ├── file1
    ├── file2
    ├── sub-dir1
    │   ├── file1
    │   ├── file2
    │   └── file3
    └── sub-dir2
        ├── file2
        └── sub-subdir1
            └── file1
    
    3 directories, 7 files
    1. 默认的 find 命令会列出该目录下的所有文件
    $ find directory
    directory
    directory/sub-dir1
    directory/sub-dir1/file3
    directory/sub-dir1/file2
    directory/sub-dir1/file1
    directory/file2
    directory/sub-dir2
    directory/sub-dir2/file2
    directory/sub-dir2/sub-subdir1
    directory/sub-dir2/sub-subdir1/file1
    directory/file1
    1. 为 find 命令指定 expression 以筛选出特定的文件
    $ find directory -name file2
    directory/sub-dir1/file2
    directory/file2
    directory/sub-dir2/file2
    1. 为 find 命令指定特殊的 action(此处 -delete 表示删除搜索结果)
    $ find directory -name file2 -delete
    $ find directory
    directory
    directory/sub-dir1
    directory/sub-dir1/file3
    directory/sub-dir1/file1
    directory/sub-dir2
    directory/sub-dir2/sub-subdir1
    directory/sub-dir2/sub-subdir1/file1
    directory/file1

    二、搜索条件(expression)

    1. 根据文件名检索

    find 命令中的 -name 选项可以根据文件名称进行检索(区分大小写)。如需要忽略文件名中的大小写,可以使用 -iname 选项。

    -name-iname 两个选项都支持 wildcards 。如:

    • ? 可以表示任意一个单一的符号
    • * 可以表示任意数量(包括 0)的未知符号

     find /usr -name '*.txt'  查找 /usr 目录下所有文件名以 .txt 结尾的文件
      find /usr -name '????'  查找 /usr 目录下所有文件名刚好为 4 个字符的文件

    有些时候,你需要在搜索时匹配某个文件或目录的完整路径,而不仅仅是匹配文件名。可以使用 -path-ipath 选项。

    如查找 /usr 下所有文件名以 .txt 结尾的文件或目录,且该文件的父目录必须是 src。可以使用以下命令:

    find /usr -path '*/src/*.txt'

    2. 根据文件类型检索

    如果只想搜索得到文件或目录,即不想它们同时出现在结果中。可以使用 -type 选项指定文件类型。

    -type 选项最常用的参数如下:

    • f: 文件
    • d: 目录
    • l: 符号链接

     find /usr -type d -name 'python*'   检索 /usr 下所有文件名以 python 开头的目录

    3. 检索空文件

    find 命令支持 -empty 选项用来检索为空的文件或目录。空文件即文件里没有任何内容,空目录即目录中没有任何文件或子目录。

     find ~ -type d -empty  检索用户主目录下所有的空目录

    4. 反义匹配

    find 命令也允许用户对当前的匹配条件进行“反义”(类似于逻辑非操作)。

    如需要检索 /usr 下所有文件名.txt 为后缀的文件。可以使用以下命令:

    find /usr -type f ! -name '*.txt'

    也可以“翻转”任何其他的筛选条件,如:
      find /usr -type f ! -empty  检索 /usr 下所有内容不为空的文件

    5. 根据文件的所属权检索

    为了检索归属于特定用户的文件或目录,可以使用 -user 选项。

     find / -type f -user starky   检索根目录下所有属主为 starky 的文件

    类似于 -user选项,-group 选项则可以根据文件或目录的属组进行检索。

    7. 根据文件大小检索

    -size 选项允许用户通过文件大小进行搜索(只适用于文件,目录没有大小……)。

    表示文件大小的单位由以下字符组成:

    • c:字节
    • k:Kb
    • M:Mb
    • G:Gb

    另外,还可以使用 +- 符号表示大于小于当前条件。

     find / -size +1G  检索文件大小高于 1 GB 的文件

    三、对搜索结果执行命令

    1. 删除文件

    -delete 选项可以用来删除搜索到的文件和目录。

    如删除 home 目录下所有的空目录:

    find ~ -type d -empty -delete

    2. 执行自定义命令

    -exec 选项可以对搜索到的结果执行特定的命令。

    如需要将 home 目录下所有的 MP3 音频文件复制到移动存储设备(假设路径是 /media/MyDrive),可使用下面的命令:

    find ~ -type f -name '*.mp3' -exec cp {} /media/MyDrive ';'

    其中的大括号{})作为检索到的文件的 占位符 ,而分号( ;)作为命令结束的标志。因为分号是 Shell 中有特殊含义的符号,所以需要使用单引号括起来。
    每当 find 命令检索到一个符合条件的文件,会使用其完整路径取代命令中的 {},然后执行 -exec 后面的命令一次。

    另一个很重要的用法是,在多个文件中检索某个指定的字符串。
    如在用户主目录下的所有文件中检索字符串 hello ,可以使用如下命令:

    find ~ -type f -exec grep -l hello {} ';'

     -exec 选项中的 + 符号

    创建 Gzip 格式的压缩文件的命令为: tar -czvf filename.tar.gz <list of files> 

    现在假设需要将用户主目录下所有的 MP3 文件添加到压缩包 music.tar.gz 中,直观的感觉是,其命令应为如下形式:

    find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} ';'

    实际情况是,这样得到的 music.tar.gz 其实只包含一个 MP3 文件。
    原因是 find 命令每次发现一个音频文件,都会再执行一次 -exec 选项后面的压缩命令。导致先前生成的压缩包被覆盖。

    可以先让 find 命令检索出所有符合条件的音频文件,再将得到的文件列表传递给后面的压缩命令。完整的命令如下:

    find ~ -type f -name '*.mp3' -exec tar -czvf music.tar.gz {} +

    显示文件信息

    如果想浏览搜索到的文件(目录)的详细信息(如权限和大小等),可以直接使用 -ls 选项。

     find / -type file -size +1G -ls   浏览所有 1G 以上大小的文件的详细信息

    四、常用参数汇总

    参数解析
    -atime n[smhdw] 距离文件上次被访问时的时间间隔
    -ctime n[smhdw] 距离文件创建时的时间间隔
    -delete 删除检索到的文件
    -depth n 检索深度为 n 的文件,即位于指定目录以下 n 层的文件
    -empty 检索空文件或空目录
    -fstype type 指定文件所在的文件系统的类型
    -group gname 指定文件的属组
    -iname pattern -name,忽略大小写
    -ipath pattern -path,忽略大小写
    -ls 打印搜索到的文件的详细信息
    -maxdepth n 指定递归的最大层数为 n
    -mtime n[smhdw] 距离文件上次发生变更时的时间间隔
    -name pattern 搜索时使用 pattern 对文件名进行匹配
    -path pattern 搜索时使用 pattern 对文件路径进行匹配
    -perm mode 根据文件权限搜索
    -size n[ckMGTP] 根据文件大小搜索
    -type t 根据文件类型搜索
    -user uname 指定文件的属主
    故乡明
  • 相关阅读:
    手机蓝牙各类服务对应的UUID
    Android数据传递的四种方法
    PS延迟显示的解决方法
    字符串分离函数
    利用cmd命令创建wifi热点
    我的毕业设计——无线控制平台
    只需简单一步,android自带的示例程序 BluetoothChat 变蓝牙串口助手
    volatile 关键字
    PC蓝牙开发笔记
    Jquery与CSS中的大于符号
  • 原文地址:https://www.cnblogs.com/luweiweicode/p/14764358.html
Copyright © 2011-2022 走看看