搜索查找是管理文件系统常用的操作,虽然动作逻辑本质上是匹配,很简单,但搜索也有很多种花样,可以用来加速搜索,快速提取想要的内容
find . #从当前目录开始递归遍历所有子目录以及下面的文件,打印出来
find . -name "hello.txt" #从当前目录开始递归向下搜索名为hello.txt的文件
find . -name "*.txt" #从当前目录开始递归向下搜索后缀名为txt的文件
find . -iname "hello*" #从当前目录开始递归向下搜索名为hello和HELLO的文件
find . \( -name "*.txt" -o -name "*.pdf" \) #从当前目录开始向下递归搜索后缀名为txt或者pdf的文件
find . -path "*/test/*" #从当前目录开始向下递归搜索包含test路径名的路径
find . ! -name "*.txt" #从当前目录开始向下递归搜索非txt文件
find . -maxdepth 3 -name "*.txt" #从当前目录开始向下递归搜索最大3层目录范围内包含的txt文件
find . -mindepth 2 -name "hello*" #从当前目录的下一级目录开始向下递归搜索名字包含hello的文件
find . \( -name ".git" -prune \) -o \( -type f \) #从当前目录开始向下递归搜索除了.git目录的其他所有目录以及包含的文件
find . -type d #从当前目录开始向下递归搜索目录文件
find . -type f #从当前目录开始向下递归搜索普通文件
find . -type l #从当前目录开始向下递归搜索链接文件
find . -type s #从当前目录开始向下递归搜索套接字文件
find . -type b #从当前目录开始向下递归搜索块设备
find . -type c #从当前目录开始向下递归搜索字符设备
find . -type p #从当前目录开始向下递归搜索FIFO文件
find . -atime -7 #搜索7天以内访问过的文件
find . -atime 7 #搜索正好7天前访问过的文件
find . -atime +7 #搜索7天以前访问过的文件
find . -ctime 7 #搜索正好7天前改变的文件
find . -mtime 7 #搜索正好7天前修改的文件
find . -amin 7 #搜索正好7分钟前访问过的文件
find . -newer file.txt #搜索比file的修改时间更新的文件
find . -size +2k #搜索等于2k的文件
find . -size -2k #搜索小于2k的文件
find . -size 2k #搜索等于2k的文件
文件大小的单位是b(512B),c(B),w(2B),k(1024B),M(1024k),G(1024M)
find . -perm 644
find . -user neo
find . -name "*.txt" -delete #从当前目录开始向下递归搜索txt文件并删除
find . -name "*.c" -exec cat {} \; > all_c_files #从当前目录开始向下递归搜索c文件并将所有的内容汇聚到all_c_files
find . -mtime +10 -name "*.txt" -exec cp {} OLD \; #从当前目录开始向下递归搜索10天以前修改过的txt文件并将他们复制到OLD文件夹中
find . -type f -name "*.txt" -exec ./command.sh {} \; #从当前目录开始向下递归搜索txt文件并交给command.sh作为参数执行
以上多个参数在命令后面的位置是有区别的,它们的位置决定了搜索的逻辑,也影响搜索的效率,比如限定搜索目录范围应该优先于限定搜索文件的名字
实际使用还需要从搜索逻辑来考虑多个影响因素,进而加快搜索速度,提高搜索效率