linux命令之find查找文件


find

find 用來在指定目錄下查找文件。任何位於參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則 find 命令將在當前目錄下查找子目錄與文件。並且將查找到的子目錄和文件全部進行顯示。

語法

find  path  -option  [ -print ]   [ -exec   -ok   command ]   {} \;

上面的 find的常用形式可以簡化為:

find [path...] [expression]
  • path:所查找的目錄路徑。例如,用.來表示當前目錄,用/來表示系統根目錄

  • expression:可以分為 “-options [-print -exec -ok ...]”

    • -options,指定find命令的常用選項,下節詳細介紹
    • -print,find命令將匹配的文件輸出到標准輸出
    • -exec,find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格
      find ./ -size 0 -exec rm {} \; 刪除文件大小為零的文件 (還可以以這樣做:rm -i find ./ -size 0find ./ -size 0 | xargs rm -f &
    • 為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec選項中:find . -type f -exec ls -l { } \;
      在/logs目錄中查找更改時間在5日以前的文件並刪除它們:find /logs -type f -mtime +5 -exec rm { } \;
    • -ok,和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
      find . -name "*.conf" -mtime +5 -ok rm { } \; 在當前目錄中查找所有文件名以.conf結尾、更改時間在5日以上的文件,並刪除它們,只不過在刪除之前先給出提示

參數

expression 中可用選項非常之多

  • -mount, -xdev : 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
  • -amin n : 在過去 n 分鍾內被讀取過
  • -anewer file : 比文件 file 更晚被讀取過的文件
  • -atime n : 在過去n天內被讀取過的文件
  • -cmin n : 在過去 n 分鍾內被修改過
  • -cnewer file :比文件 file 更新的文件
  • -ctime n : 在過去n天內被修改過的文件
  • -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
  • -ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
  • -name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
  • -size n : 文件大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。
  • -type c : 文件類型是 c 的文件
文件類型 說明
d 目錄
c 字符設備
b 塊設備
p 管道
f 普通文件
l 符號鏈接
s 套接字文件

實例

(1)根據文件名查找

-name //根據文件名查找(精確查找)
-iname //根據文件名查找,但是不區分大小寫

這里另外介紹下文件名通配符的知識

*表示通配任意的字符

find /etc -name "*passwd"     

?表示通配任意的單個字符

find /etc -name "passwd?"

[ ] 表示通配括號里面的任意一個字符

find /etc -name "[ab].sh"

(2)根據文件所屬用戶和組來查找文件

-user //根據屬主來查找文件
-group //根據屬組來查找文件

(3)根據 uid 和 gid來查找用戶

 find  /tmp  -uid  500  //查找uid是500 的文件
 find  /tmp  -gid  1000 // 查找gid是1000的文件

(4)-a and -o and –not的使用

ps:有用

-a 連接兩個不同的條件(兩個條件必須同時滿足)
-o 連接兩個不同的條件(兩個條件滿足其一即可)
-not 對條件取反的

find /tmp -name "*.sh" -a -user root
find /tmp -not -user root

(5)根據文件時間戳的相關屬性來查找文件

可以使用stat命令來查看一個文件的時間信息
如下:

stat /etc/passwd

-atime
-mtime
-ctime
-amin
-mmin
-cmin

所以這里atime, mtime, ctime就是分別對應的 “最近一次訪問時間” “最近一次內容修改時間” “最近一次屬性修改時間”,這里的atime的單位指的是“天”,amin的單位是分鍾

find /tmp –atime +5      //表示查找在五天內沒有訪問過的文件(也就是5天前天沒訪問的文件)
find /tmp -atime -5      //表示查找在五天內訪問過的文件

ps:在清理日志的時候,一般使用的是——最近一次內容修改的時間

find -mtime +30 -name "*[0-9]*" -exec rm {} \;

(6)根據文件類型來查找文件 -type

f // 普通文件

d //目錄文件

l //鏈接文件

b //塊設備文件

c //字符設備文件

p //管道文件

s //socket文件

find /tmp -type s

(7)根據大小來查找文件 -size

find /tmp -size 2M       //查找在/tmp 目錄下等於2M的文件
find /tmp -size +2M      //查找在/tmp 目錄下大於2M的文件
find /tmp -size -2M      //查找在/tmp 目錄下小於2M的文件

(8)根據文件權限查找文件 -perm

find /tmp -perm 755      //查找在/tmp目錄下權限是755的文件
find /tmp -perm +222     //表示只要有一類用戶(屬主,屬組,其他)的匹配寫權限就行
find /tmp -perm -222     //表示必須所有類別用戶都滿足有寫權限

(9)-nouser and -nogroup

find / -nogroup –a –nouser    //在整個系統中查找既沒有屬主又沒有屬組的文件(這樣的文件通常是很危險的,作為系統工程師的我們應該及時清除掉)

查找完執行的action

-print //默認情況下的動作

-ls //查找到后用ls 顯示出來

-ok [commend] //查找后執行命令的時候詢問用戶是否要執行

-exec [commend] //查找后執行命令的時候不詢問用戶,直接執行

find /tmp -name "*.sh" -exec chmod u+x {} \;

這里要注意{}的使用:替代查找到的文件

find /tmp "*.sh" -exec cp {} {}.old \;

刪除查找到的超過30天沒有訪問過文件

find  /tmp  -atime  +30  –exec rm –rf  {}  \; 

也可以使用xargs來對查找到的文件進一步操作

find /tmp -name "*.old" | xargs chmod 700

案例詳細說明

  • 刪除文件命令
find 對應目錄 -mtime +天數 -name "文件名" -exec rm -rf {} \;
  • 實例命令
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
  • 說明

將 /opt/soft/log/ 目錄下所有30天前帶".log"的文件刪除。具體參數說明如下:

  1. find linux的查找命令,用戶查找指定條件的文件;

  2. /opt/soft/log/:想要進行清理的任意目錄;

  3. -mtime:標准語句寫法;

  4. +30:查找30天前的文件,這里用數字代表天數;

  5. "*.log":希望查找的文件名正則表達式,"*.jpg"表示查找擴展名為jpg的所有文件,"*"表示查找所有文件,這個可以靈活運用,舉一反三;

  6. -exec:固定寫法;

  7. rm -rf:強制刪除文件,包括目錄;

  8. {} ; :固定寫法,一對大括號+空格+\+;

附錄

每日一令之一

linux下find命令的總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM