5. 文件查找命令

我们在计算机上工作时间长了就会积累大量的数据,这些数据大多都是以文件的形式进行存储。由于时间久了,我们经常会忘记这些文件保存在哪里,忘记有些内容存在了哪个文件当中。

这时候我们可以使用 find 和 grep 这两个常用的查找命令。

5.1 find 命令

find 命令用于在文件夹中递归搜索文件和内部的文件夹,基于文件名、路径、类型、大小、时间等属性进行查找。

他将直接操作文件系统,支持复杂的条件组合。

命令格式:

find 查找文件夹位置 [选项1 参数1] [选项2 参数2]

例如:

我们先创建一些测试文件。

weimingze@mzstudio:~$ mkdir -p myfiles/c
weimingze@mzstudio:~$ mkdir -p myfiles/cpp
weimingze@mzstudio:~$ mkdir -p myfiles/python
weimingze@mzstudio:~$ touch myfiles/c/main.c
weimingze@mzstudio:~$ touch myfiles/cpp/main.Cpp
weimingze@mzstudio:~$ touch myfiles/cpp/hello.cpp
weimingze@mzstudio:~$ touch myfiles/python/main_test.py

通过上述命令,我们形成这样一个文件结构。

myfiles/
├── c
│   └── main.c
├── cpp
│   ├── hello.cpp
│   └── main.Cpp
└── python
    └── main_test.py

示例

在当前文件夹下查找 main.c 的位置。

weimingze@mzstudio:~$ find . -name "main.c"
./myfiles/c/main.c

*? 号通配符

示例

weimingze@mzstudio:~$ find myfiles -name "*ai*"  # 查找文件名包含 "ai" 的文件,前后是什么都行
myfiles/cpp/main.Cpp
myfiles/c/main.c
myfiles/python/main_test.py
weimingze@mzstudio:~$ find myfiles -name "main*"  # 查找文件名以 "main" 开头的文件,后面是什么都行。
myfiles/cpp/main.Cpp
myfiles/c/main.c
myfiles/python/main_test.py
weimingze@mzstudio:~$ find myfiles -name "*.py"  # 查找文件名以 ".py" 结尾的文件。
myfiles/python/main_test.py
weimingze@mzstudio:~$ find myfiles -name "main.?"  # 查找文件名以 "main." 开头,文件名含有6个字符的文件。
myfiles/c/main.c
weimingze@mzstudio:~$ find myfiles -name "main.???"  # 查找文件名以 "main." 开头,文件名含有8个字符的文件。
myfiles/cpp/main.Cpp

另外文件名中还可以包含正则表达式, 正则表达式教程见:https://weimingze.com/re/,如:

查找所有 以 .cpp.CPP等人不区分大小写的 .cpp 结尾的文件

weimingze@mzstudio:~$ find myfiles -name "*.[Cc][pP][pP]"
myfiles/cpp/main.Cpp
myfiles/cpp/hello.cpp

常用选项

选项
说明
-name <文件名信息>
根据文件名查找。
-iname <文件名信息>
根据文件名查找(不区分大小写)。
-type <类型>
类型: d是文件夹、f 普通文件、l 符号链接。
-path <路径信息>
-path *lib* 表示路径中包含"lib"的文件。
-mtime <数字>-atime <数字>-ctime <数字>
按修改时间(m)、访问时间(a)、状态变更时间(c)查找(单位:天)
-size <大小信息>
根据文件大小查找,(单位:c=字节,k=KB,M=MB,G=GB)

示例

weimingze@mzstudio:~$ find myfiles -type d  # 查找文件夹
myfiles
myfiles/cpp
myfiles/c
myfiles/python
weimingze@mzstudio:~$ find myfiles -type f  # 查找文件
myfiles/cpp/main.Cpp
myfiles/cpp/hello.cpp
myfiles/c/main.c
myfiles/python/main_test.py
weimingze@mzstudio:~$ find myfiles -type d -name "c*"  # 查找 以 c 开头的文件夹
myfiles/cpp
myfiles/c
weimingze@mzstudio:~$ find myfiles -iname "*.cpp"  # 查找所有以 '.cpp" 结尾的文件(不区分大小写)
./myfiles/cpp/main.Cpp
./myfiles/cpp/hello.cpp
weimingze@mzstudio:~$ find myfiles/c/ -mtime -7  # 查找 7天内修改的文件
myfiles/c/
myfiles/c/main.c
weimingze@mzstudio:~$ find myfiles/c/ -mtime +365  # 查找 一年前修改的文件
weimingze@mzstudio:~$ find myfiles/ -size -10c  # 查找文件长度小于10字节的文件
myfiles/cpp/main.Cpp
myfiles/cpp/hello.cpp
myfiles/c/main.c
myfiles/python/main_test.py
weimingze@mzstudio:~$ find . -size +10M        # 大于10MB的文件

练习:

  1. 查找 /usr 文件夹下的所有的 random.py 文件。
  2. 查找 /usr 文件夹下的所有的 stdio.h 文件。