find - 用於查找文件的命令。node
whichlinux
在前面已經用到該命令,須要注意的一點是,which只能用來查找PATH環境變量中出現的路徑下的可執行文件。這個命令用的也是蠻多的,有時候咱們不知道某個命令的絕對路徑,which 一下很容易就知道了。
whereis正則表達式
經過預先生成的一個文件列表庫去查找跟給出的文件名相關的文件 如:whereis ls
locate數據庫
和whereis相似,也是經過查找預先生成的文件列表庫來告訴用戶要查找的文件在哪裏。 後邊直接跟文件名。若是你的linux沒有這個命令,請安裝軟件包 'mlocate', 可使用這個命令來安裝 yum install -y mlocate ,若是你剛裝上這個命令,初次使用會報錯。 [root[@localhost](https://my.oschina.net/u/570656) ~] # locate passwd locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
這是由於系統尚未生成那個文件列表庫。你可使用 updatedb 命令當即生成(更新)這個庫。若是你的服務器上正跑着重要的業務,那麼你最好不要去運行這個命令,由於一旦運行,服務器的壓力會變大。這個數據庫默認狀況下每週更新一次。因此你用locate命令去搜索一個文件,正好是在兩次更新時間段內,那你確定是得不到結果的。你能夠到/etc/updated.conf 去配置這個數據庫生成(更新)的規則。 locate所搜索到的文件列表,無論是目錄名仍是文件名,只要包含咱們要搜索的關鍵詞,都會列出來,因此locate不適合精準搜索,這個命令阿銘使用的也並很少,你只要明白有這麼一個工具便可,用到時再去深究其用法吧。
find服務器
語法 : find [路徑] [參數] 下面介紹幾個經常使用的參數 -atime +n/-n : 訪問或執行時間大於/小於n天的文件 -ctime +n/-n : 寫入、更改inode屬性(例如更改全部者、權限或者連接)時間大於/小於n天的文件 -mtime +n/-n : 寫入時間大於/小於n天的文件 -mmin +n/-n : 更改時間大於/小於n分鐘的文件 示例: # find /tmp/ -mtime -1 # find /tmp/ -atime +10 # find /tmp/ -atime +1 -name filename 直接查找該文件名的文件,這個選項使用不少。 # find . -name test2 # find . -name "*.txt" //用通配時要加上雙引號 -type filetype 經過文件類型查找。文件類型有 f, b, c, d, l, s 等。 f 普通文件 b 塊設備文件 c 字符設備文件 d 目錄 l 軟鏈接 s socket文件 # find /tmp/ -type d # find /tmp/ -type f -size [+n/-n] 根據大小查找(單位:c k M G),其中字節不是b,而是c # find . -size +10k # find . -size -1M # find . -size 4k -perm [+/-]權限 # find . -perm 777
其餘高級用法:socket
忽略大小寫文件名查找: # find /home -iname abc.txt 查找全部以.txt和.pdf結尾的文件 # find . \( -name "*.txt" -o -name "*.pdf" \) 基於正則表達式匹配文件路徑: # find . -regex ".*\(\.txt|\.pdf\)$" 基於正則表達式匹配文件路徑(忽略大小寫): # find . -iregex ".*\(\.txt|\.pdf\)$" 找出/home下不是以.txt結尾的文件: # find /home ! -name "*.txt" 限定查找目錄深度:# find . -maxdepth 3 -type f
查找後再處理:工具
1)刪除.net
# find . -type f -name "*.gz" -mtime +30 -exec rm -f {} \; # find . -type f -name "*.gz" -mtime +30 -ok rm {} \; # find . -type f -name "*.gz" -mtime +30 |xargs rm -f -ok和-exec行爲同樣,不過它會給出提示,是否執行相應的操做。
2)更名code
# find . -name "*.txt" -exec mv {} {}.bak \; # find . -name "*.txt"|xargs -i mv {} {}.bak