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 指定文件的属主
    故乡明
  • 相关阅读:
    day 66 crm(3) 自创组件stark界面展示数据
    day 65 crm(2) admin源码解析,以及简单的仿造admin组件
    用 Python+nginx+django 打造在线家庭影院
    django -admin 源码解析
    day 64 crm项目(1) admin组件的初识别以及应用
    云链接 接口不允许 情况 解决方法 mysql Host is not allowed to connect to this MySQL server解决方法
    day 56 linux的安装python3 ,虚拟环境,mysql ,redis
    day55 linux 基础以及系统优化
    Codeforces 989 P循环节01构造 ABCD连通块构造 思维对云遮月参考系坐标轴转换
    Codeforces 990 调和级数路灯贪心暴力 DFS生成树两子树差调水 GCD树连通块暴力
  • 原文地址:https://www.cnblogs.com/luweiweicode/p/14764358.html
Copyright © 2011-2022 走看看