一、為什么要有文件查找?
資料很多,忘記放哪了,所以需要通過查找的方式進行搜索
二、windows如何實現文件查找?
計算機-->搜索框
三、linux如何實現文件查找?
1.沒有圖形工具?
2.使用命令工具搜索--->find
四、find命令查找語法?
命令? ? ? ? ? ? ? ? ? 路徑? ? ? ? ? ? ? ? ? ?選項? ? ? ? ? ? ? ? ? ? ? ? 表達式? ? ? ? ? ? ? ? ? ? ? ? ? ?動作?
find? ? ? ? ? ? ? ? ? [path...]? ? ? ? ? ? [options]? ? ? ? ? ? ? ? ?[expression]? ? ? ? ? ? ? ? ? ? ?[action]? ??
查找? ? ? ? ? ? ? ? ? 地區(qū)? ? ? ? ? ? ? ? ? 男or女? ? ? ? ? ? ? ? ? ? ? 18-25歲? ? ? ? ? ? ? ? ? ? ? ? ? ???
五、find針對文件名稱、類型、大小、修改時間等方式進行查找文件?
(1)按名稱查找
#1.按照名稱進行查找
[root@localhost ~]# find ./ -name "*etho"
#2.按照名稱查找(不區(qū)分大小寫)
[root@localhost ~]# find ./ -iname "*etho"
(2)按文件大小查找size
#1.查找/etc/目錄下大于5M的文件
[root@localhost ~]# find /etc/ -size +5M
#2.查找/etc/目錄下小于5M的文件
[root@localhost ~]# find /etc/ -size -5M
#3.查找/etc/目錄下等于5M的文件
[root@localhost ~]# find /etc/ -size 5M
(3)按文件類型查找
f ? ?# 文件?
d ? ?# 目錄?
s ? ?# socket套接字文件?
l ? ?# 鏈接文件?
c ? ?# 字符設備?
b ? ?# 塊設備
#1.查找當前目錄下類型是文件的,并且名稱跟eth0相關的都列出來

#2.查找/etc/目錄下類型是文件的,大小大于5M,名稱以.bin結尾的

#.3查找/etc/目錄下類型是文件的,名稱是.repo結尾的

#4.查找/dev下的類型是塊設備的,并名稱是sda開頭的

#5.查找/dev下的類型是字符設備,并名稱是tty開頭的

(4)按修改時間進行查找-mtime
[root@localhost ~]# for i in {1..31} ; do date -s "2019/08/$i" ; touch file-$i ; done
#.1 第7天

#2. 7天以前的內容都會被篩選出來,然后刪除(保留了最近7天的內容)

#3. 最近7天的內容都會被篩選出來

#4. 本地文件保留最近7天的備份文件,備份服務器保留3個月的備份文件(實際使用方案)
[root@localhost ~]# find /backup/ -iname "*.bak" -mtime +7 -delete
[root@localhost ~]# find /backup/ -iname "*.bak" -mtime +180 -delete
(5) 按用戶和組進行查找 -user -group -nouser -nogroup
#查找屬主是jacky

#查找屬組是root

#查找屬主是jacky,屬組是jack

#查找沒有屬主

#查找沒有屬組

#查找沒有屬組或屬組

(6)find查找后的處理動作?
查找到一個文件后,需要對文件進行如何處理,find的默認動作時-print
動作 含義?
-print 打印查找到的內容(默認) ---ignore?
-ls 以長格式顯示的方式打印查找到的內容 ---ignore | xargs ls -l?
- 刪除查找到的文件 (刪除目錄,僅能刪除空目錄) ---ignore | xargs delete rm -f?
-ok 后面跟自定義 shell 命令(會提示是否操作) ---ignore?
-exec 后面跟自定義 shell 命令(標準寫法 -exec \;) | xargs


#查找/var/log/ 類型是文件的,并且名稱是.log結尾的,并且7天以前的,然后刪除



3.記得文件的內容是什么,但是不清楚文件名稱是什么,也不知道路徑在哪,怎么辦?
#find 是查詢文件?
#grep 過濾內容
#將ifnd查詢的文件結果,作為grep的參數

4.find邏輯運算符
符號? ? ? ? ? ? ? ? ?作用
-a? ? ? ? ? ? ? ? ? ? ? ?與
-o? ? ? ? ? ? ? ? ? ? ? ?或
-not|!? ? ? ? ? ? ? ?非
#1.查找當前目錄下,屬主不是root的所有文件


#2.查找當前目錄下,屬主屬于jack,并且大小大于1k的文件

#3.查找當前目錄下的屬主為root或者以xml結尾的普通文件


六、find練習
1、查找/var目錄下,屬主不是root,且文件名不以f開頭的文件
[root@localhost ~]# find /var -type f ! -user root -a ! -name "f*"
2、查找/var目錄下屬主為root,且屬組為mail的所有文件
[root@localhost ~]# find /var -type f -user root -a -group mail
3、查找/var目錄下不屬于root、lp的所有文件
[root@localhost ~]# find /var -type f ! -user root -a ! -user lp
4、查找/var目錄下最近一周內產生的文件,同時屬主不為root,也不是postfix的文件
[root@localhost ~]# find /var -type f -mtime -7 -a ! -user root -a ! -name "postfix"
5、查找/etc目錄下大于1M且類型為普通文件的所有文件
[root@localhost ~]# find /etc -type f -size +1M
6、將/etc/中的所有目錄(僅目錄)復制到/tmp下,目錄結構不變
[root@localhost ~]# find /etc/ -type d -exec mkdir -p /tmp/{} \;
7、將/etc目錄復制到/var/tmp/,/var/tmp/etc的所有目錄權限777/var/tmp/etc目錄中所有文件權限666
[root@localhost ~]# cp /etc/ /var/tmp/ -rp
[root@localhost ~]# find /var/tmp/etc -type d -exec chmod 777 {} \;
[root@localhost ~]# find /var/tmp/etc -type f -exec chmod 777 {} \;
8、保留/var/log/下最近7天的日志文件,其他全部刪除
[root@localhost ~]# find /var/log/ -type f -mtime +7 -exec rm -f {} \;
9、創(chuàng)建touch file{1..10}10個文件,保留file9,其他一次全部刪除
[root@localhost ~]# find ./ -type f -name "file*" ! name "file9" -exec rm -f {} \;