find查找概述
為什么要有文件查找
因為平時創(chuàng)建過的文件忘記放在了什么位置,在用的時候找不到。所以可以用find命令來查找文件痹雅。
find的使用場景
可以根據不同的條件去進行查找文件宾舅,條件包括(文件名稱、文件大小炊林、文件修改時間姥卢、屬主屬組、權限)等。
find語法格式
命令 路徑 選項 表達式 動作
find常用查找選項
1.按文件名稱查找
查找/etc下包含ifcfg-eth0的文件
find /etc -name "ifcfg-eth0"
-i 不區(qū)分大小寫
find /etc -iname "ifcfg-eth0"
查找/etc目錄包含ifcfg-eth名稱的所有文件
find /etc -name "ifcfg-eth0* "
以文件大小查找
1.查找大于5M的文件
find /etc -size +5M
2.查找小于5M的文件
find /etc -size -5M
3.查找等于5M的文件
find /etc -size 5M
文件類型查找
參數(shù)表示
f文件
d目錄
s socket套接字文件
l 鏈接文件
c 字符設備
b 塊設備
1.查找當前目錄下類型是文件的独榴,并且名稱與eth0
相關的都列出來
find ./ -type f -iname "*eth0" | xargs ls-l
2.查找/etc/目錄下類型是文件的,大小是大于5M,名稱以.bin結尾的 [root@oldboyedu
# find /etc/ -type f -size +5M name "*.bin"
3.查找/etc/目錄下類型是文件的,名稱是.repo結尾的
find /etc/ -type f -name "*.repo"
4.查找/dev下的類型是塊設備的,并名稱是sda開頭的
find /dev/ -type b -name "sda*" | xargs ls -l
按修改時間進行查找 -mtime
# for i in {1..31}; do date -s "2019/08/$i" ; touch file-$i ; done
.1.查找第七天
find ./ -type f -mtime 7
2..7天以前的內容都會被篩選出來,然后刪除. 保留了最近7天的內容
find ./ -type f -mtime +7 -name "file-*"
3.最近7天的內容都會被篩選出來
find ./ -type f -mtime -7 -name "file-*"
4.本地文件保留最近7天的備份文件, 備份服務器保留3個月的備份文件 (實際使用方案)
find /backup/ -iname "*.bak" -mtime +7 -delete
find /backup/ -iname "*.bak" -mtime +180 -delete
按用戶和組進行查找 -user -group -nouser -nogroup
查找屬主是jack
find /home -user jack
查找屬組是admin
find /home -group admin
查找屬主是jacky, 屬組是jack
find /home -type d -user jacky -group jack
查找沒有屬主
find /home -type d -nouser
查找沒有屬組
find /home -type d -nogroup
查找沒有屬主和屬組
find /home -type d -nouser -nogroup
find 查找后的處理動作
查找到一個文件僧叉,find的默認動作是 打印輸出---print
動作含義
-print 打印查找到的內容(默認)
-ls 以長格式顯示的方式打印查找到的內容--可忽略 通常用 |xargs ls -l
- 刪除查找到的文件,(刪除目錄棺榔,僅能刪空目錄)--可忽略 通常用|xargs delete rm -f
-ok 后面跟定義shell 命令(會提醒是否操作)----可忽略
-exec 后面跟上自定義shell命令(標準寫法- exec ;) |xargs
-exec
要結合{};來用, {}表示前面查詢的結果;結束符瓶堕,這是固定的寫法
參數(shù)是一個一個傳遞的,傳遞一個參數(shù)執(zhí)行一次
文件名有空格等特殊字符也能處理
xargs:
1.要結合 |來操作症歇,在批處理文件時郎笆,因緩沖(多線程),所以速度要快些
2.一次將參數(shù)傳給命令忘晤,可以使用-n控制參數(shù)個數(shù)
3.處理特殊文件名需要采用-0來避免特殊字符(xargs -0 )
4.xargs可以保證不會因為參數(shù)過多而結束進程
顯示用exec {} 刪除這個文件耗用的時間宛蚓。
time find ./ -type f -name "file*" -exec rm -f {} \;
real 0m6.585s
user 0m3.617s
sys 0m3.532s
用xargs刪除這個文件耗用的時間。
time find ./ -type f -name "file*" | xargs rm -f
real 0m0.152s user
0m0.016s sys
0m0.146s
查找/var/log/ 類型是文件的,并且名稱是.log結尾的,并且7天以前 的,然后刪除
#查找/var/log/ 類型是文件的,并且名稱是.log結尾的,并且7天以前 的,然后刪除 [root@oldboyedu ~]# #find /var/log/ -type f -name "*.log" -mtime +7 -exec rm -f {} \;
[root@oldboyedu ~]# #find /var/log/ -type f -name "*.log" -mtime +7 -delete [root@oldboyedu ~]# #find /var/log/ -type f -name "*.log" -mtime +7 | xargs rm -f
find 是查詢文件 #grep 過濾內容
記得文件的內容是什么设塔,但是不清楚文件名稱是什么凄吏,也不知道路 徑在哪,怎么辦?
將find查詢的文件結果闰蛔,作為grep的參數(shù)輸入
find /etc/ -type f | xargs grep "log_group" --color=auto
"log_group" --color=auto /etc/audit/auditd.conf:log_group = root
find邏輯運算符
符號 作用
-a 與
-o 或
-not|! 非
1.查找當前目錄下痕钢,屬主不是root的所有文件
find /home/ ! -user root -ls
2.查找當前目錄下,屬主屬于jack序六,并且大小大于1k的文件
find /home/ -type f -a -user jacky -a -size +1k
3.查找當前目錄下的屬主為root 或者 以xml結尾的普通文件
find . -type f -a \( -user hdfs o -name '*.xml' \)