歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> find 命令詳解

find 命令詳解

日期:2017/2/28 15:44:25   编辑:Linux教程

一 find 命令的參數
Pathname :find 命令所查找的目錄路徑。
-print:find命令將匹配的文件傳輸到標准輸出
-exec:find 命令對匹配的文件執行該參數所給出的shell命令。相應命令行事為’command’ {} \;,注意{}和\;之間的空格。
-ok;和-exec 的作用相同,只不過以一種更為安全的模式來執行該參數給出的shell 命令,在執行每個命令之前,都會給出提示

二 find 命令選項

-name 按照文件名查找文件
-perm 按照文件權限來查找文件
-prune 使用這個選項可以使find 命令不再當前指定的目錄中查找,如果同時使用-depth選項,那麼-prune將被find忽略
-user 安裝文件屬主來查找文件
-group 按照文件所屬的組來查找文件
-mtime -n +n
安裝文件的更改時間來查找文件,-n 表示文件更改時間距現在n天內
+n 表示文件更改時間距現在n天以前
Find 命令還有-atime 和-ctime 選項
-noroup 查找無效所屬組的文件,
-nouser 查找無效屬主的文件
-newer file1 file2
查找更改時間比文件file1新但比文件file2舊的文件
-type 查找某一類型的文件

b 塊設備文件
d 目錄
c 字符設備文件
p 管道文件
l 符號鏈接文件
f 普通文件
-size n[c] 查找文件長度為n塊的文件,帶c 時表示文件長度以字節計算
-depth 查找文件時,首先查找當前目錄中的文件,然後在其值目錄中查找
-mount:在查找文件時不跨越文件系統mount點。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中
-amin n
  查找系統中最後N分鐘訪問的文件
  -atime n
  查找系統中最後n*24小時訪問的文件
  -cmin n
  查找系統中最後N分鐘被改變文件狀態的文件
  -ctime n
  查找系統中最後n*24小時被改變文件狀態的文件
 -mmin n
  查找系統中最後N分鐘被改變文件數據的文件
  -mtime n
  查找系統中最後n*24小時被改變文件數據的文件

三 使用find時,只要把想要的操作寫在一個文件裡,就可以用exec來配合find查找,很方便的
在有些操作系統中只允許-exec選項執行諸如l s或ls -l這樣的命令。大多數用戶使用這一選項是為了查找舊文件並刪除它們。建議在真正執行rm命令刪除文件之前,最好先用ls命令看一下,確認它們是所要刪除的文件。
在/logs目錄中查找更改時間在5日以前的文件並刪除它們:
例如:在/logs目錄中查找更改時間在5日以前的文件並刪除它們
# find logs -type f -mtime +5 -exec rm { } \;
exec選項後面跟隨著所要執行的命令或腳本,然後是一對兒{ },一個空格和一個\,最後是一個分號。為了使用exec選項,必須要同時使用print選項。如果驗證一下find命令,會發現該命令只輸出從當前路徑起的相對路徑及文件名。
四 在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去。
在有些系統中,使用-exec選項會為處理每一個匹配到的文件而發起一個相應的進程,並非將匹配到的文件全部作為參數一次執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該命令的選項及系統內核中相應的可調參數來確定。
來看看xargs命令是如何同find命令一起使用的,並給出一些例子。
#例如 在當前目錄下面查找frank 文件,並把結果輸入到/tmp/xargs.log 文件中
#find . -name "frank" -print | xargs echo "" > /tmp/xargs.log
# cat /temp/xargs.log
./frank

Copyright © Linux教程網 All Rights Reserved