预备知识

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跳过特定的目录

results matching ""

    No results matching ""