1.find 查找文件时排除指定目录

find /path/to/search -path /path/to/search/exclude_dir -prune -o -type f -name "*.txt" -print

在这个命令中:

  • /path/to/search 是你想要搜索的顶级目录。
  • -path /path/to/search/exclude_dir 指定了要排除的目录的路径。
  • -prune 选项告诉 find 命令不要进入 -path 指定的目录。
  • -o 是逻辑“或”(OR)的意思,它用于连接 -prune 和后面的搜索条件。由于 -prune 返回 true(表示已经排除了该目录),find 不会执行后面的 -type f -name "*.txt" 条件在该目录内。但是,在其他未被排除的目录中,find 会执行这些条件。
  • -type f 指定只查找文件(不包括目录)。
  • -name "*.txt" 指定只查找扩展名为 .txt 的文件。
  • -printfind 命令的默认操作,用于打印找到的文件路径。在这里显式地写出来是为了清晰起见,但实际上可以省略。

也可以多次使用 -path ... -prune -o 的组合,或者用括号将它们组合起来(注意,括号需要用反斜杠转义或使用单引号/双引号

find /path/to/search \( -path /path/to/search/exclude_dir1 -o -path /path/to/search/exclude_dir2  -o -path /path/to/search/exclude_dir3 \) -prune -o -type f -name "*.txt" -print

常见选项

  1. 按文件名查找

    • -name pattern:按照文件名模式进行匹配搜索,支持通配符。
    • -iname pattern:类似于-name,但忽略文件名的大小写。
  2. 按文件类型查找

    • -type type:按照文件类型进行匹配搜索。type可以是以下几种类型之一:
      • f:普通文件
      • d:目录
      • l:符号链接
      • b:块设备文件
      • c:字符设备文件
      • s:套接字文件
      • p:命名管道文件

      3.按文件大小查找
        -size [+|-]n[cbkMG]:按照文件大小进行匹配搜索。+表示大于,-表示小于,n是具体的大小,[cbkMG]是可选的单位后缀,分别表示字节、KB、MB、GB和TB。

     4.按文件时间查找
        -mtime [+|-]n:按照文件修改时间进行匹配搜索。+表示早于,-表示晚于,n表示天数。
        -atime [+|-]n:按照文件访问时间进行匹配搜索。
        -ctime [+|-]n:按照文件状态改变时间进行匹配搜索。

      5 .按文件权限查找
        -perm mode:按照文件权限进行匹配搜索。mode可以使用八进制或符号格式表示权限。

      6.按文件属主或属组查找
        -user owner:按照文件所有者进行匹配搜索。
        -group group:按照文件所属组进行匹配搜索。

      7. 其他选项
        -exec command {} \;:对搜索到的每个文件执行指定的命令。{}会被搜索到的文件名替换。
        -ok command {} \;:与-exec选项类似,但在执行命令之前会询问用户是否继续。
        -delete:删除搜索到的文件。
        -print:将搜索到的文件名打印到标准输出(默认操作)。
        -ls:类似于ls -l命令的输出格式,显示文件的详细信息。
        -print0:以NULL字符作为分隔符输出搜索到的文件名,可以处理文件名中包含空格或其他   特   

       8.殊字符的情况。
        -quit:在搜索到第一个匹配项后立即退出,不再继续搜索。
        -maxdepth levels:限制搜索的最大深度。
        -mindepth levels:限制搜索的最小深度。
        -prune:排除指定的目录,不进入其中进行搜索。
        -path pattern:类似于-name,但匹配的是文件的完整路径。
        -ipath pattern:类似于-path,但忽略模式的大小写。
        -regex pattern:使用正则表达式进行匹配搜索。
        -iregex pattern:类似于-regex,但忽略正则表达式的大小写。

实用示例

    1. 搜索当前目录下所有扩展名为.txt的文件:

find . -name "*.txt"

    2.搜索/home目录下大于1MB的普通文件:

   

find /home -type f -size +1M

  3.搜索/var/log目录下修改时间早于7天前的日志文件:

find /var/log -type f -mtime +7

   4.搜索/etc目录下所有属于root用户的文件:

find /etc -user root

   5.删除当前目录及其子目录中所有扩展名为.bak的文件:

find . -name "*.bak" -exec rm {} \;

6.搜索当前目录下所有名字中包含file的文件,不区分大小写:

find . -iname "*file*"

  7.搜索/usr/bin目录下所有符号链接文件:

find /usr/bin -type l

  8. 排除指定目录进行搜索:

   

find /path/to/search -path /path/to/search/exclude_dir -prune -o -type f -print

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部