Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程

find命令詳解

日期:2017/1/20 17:46:03      編輯:系統常見問題解答

find是linux下最棒的命令之一,其查詢功能非常強大。以下將詳細介紹find的大多數用法:
工作方式:其沿著文件層次結構向下遍歷,匹配符合條件的文件,並執行相應的操作。


  1.  
  2. 1.打印文件和目錄列表
  3. $find . -print #打印文件和目錄列表

當使用-print時,’\n’作為用於分隔文件的定界符。 -print0指明使用’\0’作為定界符來打印匹配的每一個文件名。此方法對於文件名中含有’\n’是非常有效。 但在centos上經實際測試,find直接顯示匹配到的文件,不需要加上-print選項。 2.根據文件名或正則表達式匹配搜索 選項-name指定了文件名所必須配皮的字符串.


  1.  
  2. $find . -name "*.txt" -print # 打印以.txt結尾的文件
  3. $find . -iname "*.txt" -print #-iname表示匹配的文件名忽略大小寫

3.條件限制,匹配多個條件中的一個 -a:表示且 -o:表示或 -not:表示非


  1.  
  2. $find . \( -name "*.txt" -o -name "*.pdf" \) -print #打印當前目錄下以.txt或.pdf結尾的文件
  3. $find . \( -name "*.txt" -a -name "a*" \) -print #打印當前目錄下以a開頭且以.txt結尾的文件
  4. $find . -not \( -name "*.txt" -a -name "a*" \) -print #打印當前目錄下不以a開頭或不以.txt結尾的文件
  5. $find . -not \( -name "*.txt" -o -name "a*" \) -print #打印當前目錄下不以a開頭qie不以.txt結尾的文件

-not用法源於德摩根定律,詳見http://zh.wikipedia.org/wiki/%E5%BE%B7%E6%91%A9%E6%A0%B9%E5%AE%9A%E5%BE%8B

-path:此參數用於將文件路徑作為一個整體進行匹配。


  1.  
  2. $find /home/user -path "*sh" -print
  3. /home/user/bin/1.sh
  4. /home/user/bash
  5. -regex :此參數與-path類似,只不過其是基於正則表達式來匹配文件路徑的。
  6. $find . -regex ".*\( \.py \| \.sh \)$"

4.否定參數 find也可以用“!”作為否定參數。


  1.  
  2. $find . ! -name ".txt" -print #匹配所有不以.txt結尾的文件

5.基於目錄的深度搜索 find命令在用時會遍歷所有的子目錄,我們可以采用一些參數來限制其遍歷的深度。


  1.  
  2. -maxdepth:最大深度限制,1表示只在當前目錄,2表示向下兩級。。。。。。
  3. $find . -maxdepth 1 -type f -print #只列出當前目錄下的所有普通文件
  4. -mindepth:最小深度限制,與上面用法相似。
  5. $find . -mindepth 2 -type f -print #列出距當前目錄至少兩個子目錄的所有文件

6.根據文件類型搜索 linux下的文件類型 文件類型 類型參數 普通文件 f 符號文件 l 目錄 d 字符設備 c 塊設備 b 套接字 s Fifo(管道文件) p


  1.  
  2. $find . -type f -print
  3. $find . -type d -print

7.根據文件時間進行搜索 linux文件系統中的每個文件都有三種時間戳: 訪問時間(atime——access time):就是上次訪問這個文件的時間。 改變時間(ctime——change time):就是文件的inode改變的時間(什麼是inode?)當你往一個文件中添加數據或者刪除數據的時候,修改文件所有者的時候,鏈接改變的時候,文件的ctime就會發生改變。 修改時間(mtime——modification time):就是文件的內容上一次發生改變的時候的時間。 -atime,-ctime,-mtime可作為find的時間參數。單位是天,這些值通常還帶有+或-:+表示大於,-表示小於。


  1.  
  2. $find . -type f -atime -7 -print #打印7天內被訪問的文件
  3. $find . -type f -atime 7 -print #打印恰好在7天前被訪問的文件
  4. $find . -type f -atime +7 -print #打印超過7天沒被訪問的文件

上面的時間都是基於“天”,還有基於“分鐘”的。 -amin -mmin -cmin 用法與上相似,再次就不舉例了。 find的另一個漂亮的特性是-newer參數,我們可以指定一個用於比較時間戳的參考文件,然後找出比參考文件更新的所有文件。


  1.  
  2. $find . -type f -newer file.txt -print

8.基於文件大小的搜索


  1.  
  2. -size:用法與上相似
  3. $find . -type f -size +2k #查找大於2k的文件
  4. $find . -type f -size 2k #查找等於2k的文件
  5. $find . -type f -size -2k #查找小於2k的文件

除了k之外,還有其他文件大小單元 b——塊(512字節)。 c——字節。 w——字。 k——千字節。 M——兆字節。 G——吉字節。 9.刪除匹配的文件


  1.  
  2. -delete參數可以實現此功能。
  3. $find . -type f -name "*.swp" -delete

10.基於文件權限和所有權記性匹配


  1.  
  2. -perm:
  3. $find . -type f -perm 644 -print #打印出權限為644的文件
  4. -user:後可解用戶名或uid
  5. $find . -type f -user root -print # 打印root用戶所擁有的文件

11.結合find執行命令或動作


  1.  
  2. -exec:此參數是find最強大的參數之一。
  3. $find . -type f -name "*.c" -exec cat {} \; > file.txt #將所有c程序拼接起來寫入單個文件file.txt中
  4. $find . -type f -mtime +10 -name "*.txt" -exec cp {} /tmp \; #將10天前的.txt文件復制到/tmp下
  5. 注:{}表示匹配到的文件。

12.讓find跳過特定的目錄


  1.  
  2. $find . \(-name ".git" -prune \) -o \( -type f -print \)

13.find與xargs結合使用


  1.  
  2. xargs:將標准輸入轉換成命令行參數。
  3. $find . -type f -name "*.txt" -print0 |xargs -0 rm -f #將匹配到的文件刪除,xargs -0將 \0作為輸入定界符。
  4. $find . -type f -name "*.c" -print0 | xargs -0wc -l #統計所有c程序文件的行數
  5.  
Copyright © Windows教程網 All Rights Reserved