首頁 > 軟體

Linux find命令詳述

2020-06-16 18:07:38

find是Linux下最棒的命令之一,其查詢功能非常強大。以下將詳細介紹find的大多數用法:

工作方式:其沿著檔案層次結構向下遍歷,匹配符合條件的檔案,並執行相應的操作。

1.列印檔案和目錄列表
$find . -print  #列印檔案和目錄列表

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

$find . -name "*.txt" -print  # 列印以.txt結尾的檔案
$find . -iname "*.txt" -print    #-iname表示匹配的檔名忽略大小寫
3.條件限制,匹配多個條件中的一個
-a:表示且
-o:表示或
-not:表示非

$find . ( -name "*.txt" -o -name "*.pdf" ) -print  #列印當前目錄下以.txt或.pdf結尾的檔案
$find . ( -name "*.txt" -a -name "a*" ) -print  #列印當前目錄下以a開頭且以.txt結尾的檔案
$find . -not ( -name "*.txt" -a -name "a*" ) -print  #列印當前目錄下不以a開頭或不以.txt結尾的檔案
$find . -not ( -name "*.txt" -o -name "a*" ) -print  #列印當前目錄下不以a開頭qie不以.txt結尾的檔案
-not用法源於德摩根定律

-path:此引數用於將檔案路徑作為一個整體進行匹配。

$find /home/user -path "*sh" -print
  /home/user/bin/1.sh
  /home/user/bash
-regex :此引數與-path類似,只不過其是基於正規表示式來匹配檔案路徑的。
$find . -regex ".*( .py | .sh )$"
4.否定引數
find也可以用“!”作為否定引數。

$find . ! -name ".txt" -print  #匹配所有不以.txt結尾的檔案</code></pre>
5.基於目錄的深度搜尋
find命令在用時會遍歷所有的子目錄,我們可以採用一些引數來限制其遍歷的深度。

-maxdepth:最大深度限制,1表示只在當前目錄,2表示向下兩級。。。。。。
$find . -maxdepth 1 -type f -print    #只列出當前目錄下的所有普通檔案
-mindepth:最小深度限制,與上面用法相似。
$find . -mindepth 2 -type f -print    #列出距當前目錄至少兩個子目錄的所有檔案
6.根據檔案型別搜尋
linux下的檔案型別
檔案型別            型別引數
普通檔案              f
符號檔案              l
目錄                    d
字元裝置              c
塊裝置                  b
通訊端                  s
Fifo(管道檔案)  p

$find , -type f -print
$find . -type d -print
7.根據檔案時間進行搜尋
linux檔案系統中的每個檔案都有三種時間戳:
存取時間(atime——access time):就是上次存取這個檔案的時間。
改變時間(ctime——change time):就是檔案的inode改變的時間(什麼是inode?)當你往一個檔案中新增資料或者刪除資料的時候,修改檔案所有者的時候,連結改變的時候,檔案的ctime就會發生改變。
修改時間(mtime——modification time):就是檔案的內容上一次發生改變的時候的時間。
-atime,-ctime,-mtime可作為find的時間引數。單位是天,這些值通常還帶有+或-:+表示大於,-表示小於。

$find . -type f -atime -7 -print  #列印7天內被存取的檔案
$find . -type f -atime  7 -print  #列印恰好在7天前被存取的檔案
$find . -type f -atime +7 -print  #列印超過7天沒被存取的檔案
上面的時間都是基於“天”,還有基於“分鐘”的。
-amin
-mmin
-cmin
用法與上相似,再次就不舉例了。
find的另一個漂亮的特性是-newer引數,我們可以指定一個用於比較時間戳的參考檔案,然後找出比參考檔案更新的所有檔案。

$find . -type f -newer file.txt -print
8.基於檔案大小的搜尋

-size:用法與上相似
$find . -type f -size +2k                  #查詢大於2k的檔案
$find . -type f -size 2k                  #查詢等於2k的檔案
$find . -type f -size -2k                  #查詢小於2k的檔案</code></pre>
除了k之外,還有其他檔案大小單元
b——塊(512位元組)。
c——位元組。
w——字。
k——千位元組。
M——兆位元組。
G——吉位元組。
9.刪除匹配的檔案

-delete引數可以實現此功能。
$find . -type f -name "*.swp" -delete
10.基於檔案許可權和所有權記性匹配

-perm:
$find . -type f -perm 644 -print #列印出許可權為644的檔案
-user:後可解使用者名稱或uid
$find . -type f -user root -print    # 列印root使用者所擁有的檔案
11.結合find執行命令或動作

-exec:此引數是find最強大的引數之一。
$find . -type f -name "*.c" -exec cat {} ; > file.txt  #將所有c程式拼接起來寫入單個檔案file.txt中
$find . -type f -mtime +10 -name "*.txt" -exec cp {} /tmp ;    #將10天前的.txt檔案複製到/tmp下
註:{}表示匹配到的檔案。
12.讓find跳過特定的目錄

$find  . (-name ".git" -prune ) -o ( -type f -print )
13.find與xargs結合使用

xargs:將標準輸入轉換成命令列引數。
$find . -type f -name "*.txt" -print0 |xargs  -0 rm -f  #將匹配到的檔案刪除,xargs -0將 作為輸入定界符。
$find . -type f -name "*.c" -print0 | xargs  -0wc -l    #統計所有c程式檔案的行數

Linux下查詢檔案find命令  http://www.linuxidc.com/Linux/2014-10/108575.htm

Linux下find命令詳解 http://www.linuxidc.com/Linux/2011-08/40669.htm

文字查詢利器find的使用 http://www.linuxidc.com/Linux/2014-03/97559.htm

功能強大的find命令 http://www.linuxidc.com/Linux/2014-01/95236.htm

Linux系統find命令詳解 http://www.linuxidc.com/Linux/2014-06/103232.htm


IT145.com E-mail:sddin#qq.com