find
用法:
$ find --help
Usage: find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
...
表示在某个路径(path)下查找文件(文件夹)。
1、单独输入一个 find
会显示当前目录中所有文件及文件夹:
$ find
.
./app
./app/file1.txt
./app/file2.txt
./file1.txt
./file2.txt
./file3.txt
2、指定目录下查找
指定在 ./app/
目录下查找文件:
$ find app/
app/
app/file1.txt
app/file2.txt
3、指定查找文件的类型为目录或者文件
使用 -type d
表示只查找目录,d
是 directory 的缩写,在当前目录查找所有目录:
$ find . -type d
.
./app
使用 -type f
表示只查找文件,f
是 file 的缩写。在当前目录查找所有文件:
$ find . -type f
./app/file1.txt
./app/file2.txt
./file1.txt
./file2.txt
./file3.txt
4、指定文件(夹)名称查找
使用 -name <name>
表示查找名称为 <name>
的文件(夹)。在当前目录以及子目录下查找名称为 file1.txt
的文件:
$ find . -type f -name file1.txt
./app/file1.txt
./file1.txt
名称支持通配符,但是必须用双引号包括:
$ find . -name "file*"
./app/file1.txt
./app/file2.txt
./file1.txt
./file2.txt
./file3.txt
5、按路劲查找
-path
表示按路径查找:
$ find . -path "*app/*"
./app/file1.txt
./app/file2.txt
6、组合查找: AND 和 OR 操作符
-or
表示或者的意思,下面的命令查找名称为 file1.txt
或者名称为 file2.txt
的文件(夹):
$ find . -name file1.txt -or -name file2.txt
./app/file1.txt
./app/file2.txt
./file1.txt
./file2.txt
-and
表示与(并且)的意思,下面的命令查找名称满足 file1*
并且是文件夹:
$ find . -name "file1*" -and -type d
./file1
7、忽略大小写
假设你要查找类型为 js
的文件,并且忽略后缀大小写,你可以这样做:
$ find . -name "*.js" -or -name "*.JS" -or -name "*.Js" -or -name "*.jS"
同样你也可以简单的在 name
前添加一个 i
—— -iname
,表示忽略大小写:
$ find .-iname "*.js"
前面提到的所有选项都支持在前面添加 i
来表示忽略大小写(case-insensitive)。
8、NOT 操作符
还可以增加更复杂的操作,使用 NOT
表示不是(否)的意思。查找名称为 *.js
和 *.html
但是路径不是 *programs*
的文件(夹):
$ find . \( -name "*.js" -or -name "*.html" \) -and -not -path "*programs*"
./websites/simple/index.html
./websites/simple/code.js
9、删除查找的结果
可以使用 -delete
用来删除查找的结果,例如删除当前仓库中所有的 html 文件:
$ find . -name "*.html" -type f -delete
注意使用这个选项来删除文件夹,无法删除非空的文件夹,如果想要删除文件夹,例如我想删除目录下所有的 node_modules
(在大型前端项目下,我经常有这个需求),可以这样做:
$ find . -name node_modules -type d | xargs rm -rf
(完)