预备知识
find命令的工作如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作。
实战演练
要列出当前目录及子目录下所有的文件和文件夹,可以采用下面的写法:
find . -print
find base_path
补充内容
根据文件名或正则表达式进行搜索
- 符合条件的文件名或文件路径
[root@shaofeng ~]# find /root/ -name "*.txt" -print
/root/backup/temp.txt
/root/file.txt
/root/1.txt
/root/out.txt
- 忽略字母的大小写
[root@shaofeng ~]# find /root/ -iname "*.Txt" -print
/root/backup/temp.txt
/root/file.txt
/root/1.txt
/root/out.txt
- 如果想匹配多个条件中的一个,可以采用or条件操作
[root@shaofeng ~]# find ~ \( -name "*.txt" -o -name "*.sh" \) -print
/root/fname_test.sh
/root/repeat.sh
/root/function.sh
/root/backup/temp.txt
/root/sleep.sh
/root/time_take.sh
/root/debug.sh
/root/file.txt
/root/util.sh
/root/ifs.sh
/root/printf.sh
/root/script.sh
/root/IsRoot.sh
/root/ser.sh
/root/eq.sh
/root/1.txt
/root/out.txt
- 将文件路径作为整体匹配
[root@shaofeng ~]# mkdir path
[root@shaofeng ~]# find /root -path "*/path" -print
/root/path
- 正则匹配-regex或-iregex
否定参数
- "!"否定参数的含义
[root@shaofeng ~]# find . ! -name "*.txt" -print
基于目录深度的搜索
[root@shaofeng ~]# find ~ -maxdepth 1 -name "*p" -print
/root/backup
/root/.pip
[root@shaofeng ~]# find ~ -mindepth 1 -name "*p" -print
/root/.cache/pip
/root/.cache/pip/http
/root/backup
/root/.pip
根据文件类型搜索
[root@shaofeng ~]# find . -type d -print
.
./.cache
./.cache/pip
./.cache/pip/http
./.cache/pip/http/f
./.cache/pip/http/f/e
./.cache/pip/http/f/e/d
./.cache/pip/http/f/e/d/0
./.cache/pip/http/f/e/d/0/e
./path
./backup
./.ssh
./.pki
./.pki/nssdb
./.pip
文件类型 | 类型参数 |
---|---|
普通文件 | f |
符号链接 | l |
目录 | d |
字符设备 | c |
块设备 | b |
套接字 | s |
FIFO | p |
根据文件时间进行搜索
- 访问时间(-atime)
- 修改时间(-mtime)
变化时间(-ctime)
打印最近7天内被访问过的所有的文件
[root@shaofeng ~]# find . -type f -iname "*.txt" -atime -7 -print
./backup/temp.txt
./file.txt
./out.txt
- 打印出恰好在7天前被访问过的所有文件
[root@shaofeng ~]# find . -type f -iname "*.txt" -atime 7 -print
./backup/temp.txt
./file.txt
./out.txt
- 打印出访问时间超过7天的所有文件
[root@shaofeng ~]# find . -type f -name "*.txt" -atime 7 -print
- -amin
- -mmin
- -cmin
[root@shaofeng ~]# find . -type f -amin +7 -print
- -newer参数:找出比out.txt修改时间更近的所有文件
[root@shaofeng ~]# find . -type f -newer "out.txt" -print
./file.txt
./output.session
./.bash_history
./timing.log
基于文件大小的搜索
- 大于、小于、等于2kb文件
[root@shaofeng ~]# find . -type f -size +2k
[root@shaofeng ~]# find . -type f -size -2k
[root@shaofeng ~]# find . -type f -size 2k
- b—块(512字节)
- c—字节
- w—字(2字节)
- k—1024字节
- M—1024K字节
- G—1024M字节
删除匹配的文件
- -delete
基于文件权限和所有权的匹配
- -perm
- -user
利用find执行命令或动作
- 修改文件所有权
[root@shaofeng ~]# find . -type f -user root -exec chown shaofeng {} \;
- 将给定目录中的所有c程序文件拼接起来写入单个文件all_c_files.txt
[root@shaofeng ~]# find . -type f -user root -exec cat {} \;>all_c_files.txt
- 用下列命令将10天前的.txt文件复制到old目录中:
[root@shaofeng ~]# find . -type f -mtime +10 -name "*.txt" -exec cp {} old \;
让find跳过特定的目录