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
.代表查找当前文件夹-name选项是根据文件名信息查找,后跟文件名信息,文件名信息建议使用英文的双引号(")括起来。
* 和 ? 号通配符
*代表 0个、1个或多个任意字符。?代表 1个任意字符。
示例
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的文件
练习:
- 查找
/usr文件夹下的所有的random.py文件。 - 查找
/usr文件夹下的所有的stdio.h文件。