文件查找
1.根据文件名或正则表达式匹配搜索
$ find /home -name “*.txt” -print #在目录下寻找名字中后缀是.txt的文件。
$ find /home -iname “example*” -print #忽略大小写
我们还可以用-o来找出符合多重条件的文件;
$ find /home \( -name “*.txt” -o -name “*,log” \) -print #注意括号中(与操作之间有一个空格。
2.查找路径
$find /home/jiao -path “*my*” -print
查找在目录下凡是路径中含有my字符的文件,
注意,my前后各有一个*,若把两个* 任意去掉一个,则含义就会变,自己体会实践。
-regex与-path 的意义基本相同,只不过-regex后面跟的是正则表达式。
$ find . -regex “.*\(\.py\|\.sh\)$”
同理,-iregex 是忽略大小写参数
3.否定参数
$ find . ! -name “.txt” -print
很好理解,找出后缀不是.txt 的文件
4.
基于目录深度的搜索
$ find . -maxdepth 2 -type f -print
-maxdepth 在当前目录下最多向下扩展两级子目录。
相反的:
$ find . -mindepth 2 -type f -print
-mindeprh 在当前目录下最少向下扩展两级子目录。
注意:
这里有一个要注意的效率问题,就是-maxdepth 和 -mindepth 要放在-f等参数前面。
否则,我们已经找到了当前目录下的所有符合要求的文件,却要去除那些不符合路径要求的文件,造成了资源浪费。
5.根据文件类型搜索
$find . -type f -print
6.根据文件时间搜索
每个文件都有三个时间属性:
访问时间(-atime):用户最经一次访问时间
修改时间(-mtime): 文件最后一次修改时间
变化时间(-ctime):文件元数据(权限、所属用户)最近修改时间
注意:linux中并没有新建时间。
$find . -type f -atime -7 -print #找出最近七天内访问的文件
$find . -type f -atime 7 -print #找出最近七天前访问的文件
$find . -type f -atime +7 -print #找出最近超过七天访问的文件
注意,我们默认是以天作为时间单位的。
而 -amin -mmin -cmin 则是以分钟作为时间单位。
7.基于文件大小的搜索
$ find . -type f -size +2k #大于2k的文件
$ find . -type f -size 2k #等于2k的文件
$ find . -type f -size -2k #小于2k的文件
除了k之外,还有
b----块(512字节)
c-----字节
w-----字
k-----千字节
M----兆字节
8.删除匹配的文件
$ find . -type f -name “*.swp” -delete
9.
基于文件权限和所有权的匹配
$find . -type f -perm 644 -print
10.结合find执行命令或动作
find可以借助-exec于其他命令进行结合
我们要将所有的.c的结尾的文件拼起来,然后写入一个文件中。
$ find . -type f -name “*.c” -exec cat {} \;>c_file.txt
我们可以将10天前的.txt文件写入old.txt中
$ find . -type f -mtime +10 -name “*.txt” -exec cp {} old.txt \;
注意,因为-exec 后面只能跟一个命令,要想写入多个命令,我们可以将多个命令写入脚本。
-exec ./comands.sh {} \;
11.
跳过特定的目录
$find /home \( -name “.git” -prune \) -o \( -type f -print \)
\( -name “.git” -prune \) 是用于进行排除 prune就是修建,减少的意思