问答题587/1053find 命令如何使用?

难度:
2021-11-02 创建

参考答案:

find 是一个非常强大的命令,用于在指定目录中查找符合条件的文件和目录。它支持多种选项和表达式,可以根据文件名、修改时间、权限等属性来查找文件。

基本语法

1find <路径> <查找条件> <执行动作>
  • <路径>:指定要搜索的目录路径(可以是相对路径或绝对路径),如果路径为空或省略,默认为当前目录(.)。
  • <查找条件>:用于过滤符合特定条件的文件或目录。
  • <执行动作>:对查找到的文件或目录执行的操作(比如打印、删除、修改权限等)。

1. 查找文件(文件名)

最基本的查找条件是文件名,使用 -name-iname(忽略大小写)来查找特定文件。

  • 查找当前目录及子目录下名为 file.txt 的文件:

    1find . -name "file.txt"
  • 查找所有扩展名为 .log 的文件(忽略大小写):

    1find . -iname "*.log"

2. 查找文件类型

使用 -type 来限制查找的类型,可以是文件、目录、符号链接等。

  • 查找当前目录及子目录中的所有文件:

    1find . -type f
  • 查找当前目录及子目录中的所有目录:

    1find . -type d
  • 查找当前目录及子目录中的所有符号链接:

    1find . -type l

3. 按文件大小查找

可以使用 -size 选项按文件的大小进行查找。

  • 查找当前目录及子目录中大小为 1MB 的文件:

    1find . -size 1M
  • 查找当前目录及子目录中大于 100MB 的文件:

    1find . -size +100M
  • 查找当前目录及子目录中小于 10KB 的文件:

    1find . -size -10k

4. 按修改时间查找

-mtime-atime-ctime 分别用于按文件的修改时间、访问时间和更改时间来查找文件。

  • 查找当前目录及子目录中 7 天内修改过的文件:

    1find . -mtime -7
  • 查找当前目录及子目录中 7 天前修改过的文件:

    1find . -mtime +7
  • 查找当前目录及子目录中 30 天内访问过的文件:

    1find . -atime -30

5. 查找并执行操作

可以使用 -exec 选项来对查找到的文件执行操作。例如,删除查找到的文件、修改权限等。

  • 查找并删除所有 .log 文件:

    1find . -name "*.log" -exec rm -f {} \;

    解释:

    • -exec 后跟执行的命令,{} 表示当前找到的文件,\; 用来结束命令。
  • 查找并将所有 .txt 文件的权限更改为 755

    1find . -name "*.txt" -exec chmod 755 {} \;
  • 查找并显示所有 .txt 文件的详细信息:

    1find . -name "*.txt" -exec ls -l {} \;

6. 按权限查找

可以使用 -perm 来查找具有特定权限的文件。

  • 查找当前目录及子目录中权限为 755 的文件:

    1find . -perm 755
  • 查找当前目录及子目录中具有 x 执行权限的文件:

    1find . -perm /111

    解释:/111 表示文件具有任意的执行权限(用户、组或其他的执行权限)。

7. 查找多个条件

可以通过组合多个条件来查找文件,条件之间使用 -and-or 连接。

  • 查找当前目录中名为 file.txt 且大小大于 1MB 的文件:

    1find . -name "file.txt" -and -size +1M
  • 查找当前目录中名为 file.txtfile.log 的文件:

    1find . \( -name "file.txt" -or -name "file.log" \)

    解释:\( \) 用于将多个条件组合在一起。

8. 查找空文件

使用 -empty 来查找空文件或空目录。

  • 查找当前目录及子目录中所有空文件:

    1find . -type f -empty
  • 查找当前目录及子目录中所有空目录:

    1find . -type d -empty

9. 查找并限制结果数目

使用 -maxdepth 限制查找的最大目录深度。

  • 查找当前目录下(不进入子目录)所有的 .txt 文件:

    1find . -maxdepth 1 -name "*.txt"
  • 查找当前目录及子目录中的 .txt 文件,但最大只查找 2 层子目录:

    1find . -maxdepth 2 -name "*.txt"

10. 排除某些目录或文件

使用 -path-prune 来排除特定的目录或文件。

  • 查找当前目录及子目录中的所有 .txt 文件,但排除 /tmp 目录:
    1find . -path "./tmp" -prune -o -name "*.txt" -print

最近更新时间:2024-12-24