shell find命令用法

2021-08-02 04:57:51 字數 3993 閱讀 6021

由於find具有強大的功能,所以它的選項也很多,其中大部分選項都值得我們花時間來了解一下。即使系統中含有網路檔案系統( n f s ),find命令在該檔案系統中同樣有效,只你具有相應的許可權。

在執行乙個非常消耗資源的find命令時,很多人都傾向於把它放在後台執行,因為遍歷乙個大的檔案系統可能會花費很長的時間(這裡是指3 0 g位元組以上的檔案系統)。

find命令的一般形式為:

find pathname -options [-print -exec -ok]

先了解一下find所帶的引數,能實現哪些功能

find命令選項

-name:按照檔名查詢檔案。

-perm:按照檔案許可權來查詢檔案。

-prune:使用這一選項可以使find命令不在當前指定的目錄中查詢,如果同時使用-depth選項,那麼-prune將被find命令忽略。

-user: 按照檔案屬主來查詢檔案。

-group:按照檔案所屬的組來查詢檔案。

-mtime -n +n:按照檔案的更改時間來查詢檔案, - n表示檔案更改時間距現在n天以內,+ n表示檔案更改時間距現在n天以前。find命令還有- a t i m e和- c t i m e選項,但它們都和- mtime選項。

-nogroup:查詢無有效所屬組的檔案,即該檔案所屬的組在/etc/g r o u p s中不存在。

-nouser:查詢無有效屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。

-newer file1 ! file2:查詢更改時間比檔案f i l e 1新但比檔案f i l e 2舊的檔案。

-type 查詢某一型別的檔案,諸如:

b - 塊裝置檔案。d - 目錄。c - 字元裝置檔案。p - 管道檔案。l - 符號鏈結檔案。f - 普通檔案。

-size n:[c] 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。

-depth:在查詢檔案時,首先查詢當前目錄中的檔案,然後再在其子目錄中查詢。

-fstype:查詢位於某一型別檔案系統中的檔案,這些檔案系統型別通常可以在配置檔案/etc/fstab中找到,該配置檔案中包含了本系統中有關檔案系統的資訊。

-mount:在查詢檔案時不跨越檔案系統m o u n t點。

-follow:如果find命令遇到符號鏈結檔案,就跟蹤至鏈結所指向的檔案。

-cpio:對匹配的檔案使用c p i o命令,將這些檔案備份到磁帶裝置中。

下面這個選項我覺得這個很好用,說明下:

使用exec或ok來執行shell命令

使用find時,只要把想要的操作寫在乙個檔案裡,就可以用exec來配合find查詢,很方便的

(在有些作業系統中只允許- e x e c選項執行諸如l s或ls -l這樣的命令)。大多數使用者使用這一選項是為了查詢舊檔案並刪除它們。建議在真正執行r m命令刪除檔案之前,最好先用l s命令看一下,確認它們是所要刪除的檔案。

exec選項後面跟隨著所要執行的命令或指令碼,然後是一對兒,乙個空格和乙個\,最後是乙個分號。

為了使用exec選項,必須要同時使用print選項。如果驗證一下find命令,會發現該命令只輸出從當前路徑起的相對路徑及檔名。

例如:為了用ls -l命令列出所匹配到的檔案,可以把ls -l命令放在find命令的- e x e c選項中

上面的例子中,find命令匹配到了當前目錄下的所有普通檔案,並在-exec選項中使用ls -l命令將它們列出。

在/ l o g s目錄中查詢更改時間在5日以前的檔案並刪除它們:

$ find logs -type f -mtime +5 -exec rm {} \;

記住,在s h e l l中用任何方式刪除檔案之前,應當先檢視相應的檔案,一定要小心!當使用諸如m v或r m命令時,可以使用- e x e c選項的安全模式。它將在對每個匹配到的檔案進行操作之前提示你。

在下面的例子中, find命令在當前目錄中查詢所有檔名以. log結尾、更改時間在5日以上的檔案,並刪除它們,只不過在刪除之前先給出提示。

按y鍵刪除檔案,按n鍵不刪除。

任何形式的命令都可以在- exec選項中使用。

在下面的例子中我們使用grep命令。find命令首先匹配所有檔名為「 passwd*」的檔案,例如passwd、passwd.old、passwd.bak,然後執

行grep命令看看在這些檔案中是否存在乙個sam使用者。

# find /etc -name "passwd*" -exec grep "sam" {} \;

sam:x:501:501::/usr/sam:/bin/bash

find命令的例子

1.查詢當前使用者主目錄下的所有檔案,下面兩種方法都可以使用:

$ find $home -print

$ find ~ -print

2.為了在當前目錄中檔案屬主具有讀、寫許可權,並且檔案所屬組的使用者和其他使用者具有讀許可權的檔案,可以用:

$ find . -type f -perm 644 -exec ls -l {} \;

3.為了查詢系統中所有檔案長度為0的普通檔案,並列出它們的完整路徑,可以用:

$ find / -type f -size 0 -exec ls -l {} \;

4.查詢/var/logs目錄中更改時間在7日以前的普通檔案,並在刪除之前詢問它們:

$ find /var/logs -type f -mtime +7 -ok rm {} \;

5.為了查詢系統中所有屬於root組的檔案,可以用:

$find . -group root -exec ls -l {} \;

-rw-r--r-- 

1 root 

root 

595 10月 31 01:09 ./fie1

6.下面的find命令將刪除當目錄中訪問時間在7日以來、含有數字字尾的admin.log檔案。該命令只檢查三位數字,所以相應檔案的字尾不要超過999。

先建幾個admin.log*的檔案 ,才能使用下面這個命令

$ find . -name "admin.log[0-9][0-9][0-9]" -atime -7  -ok rm {} \;

< rm ... ./admin.log001 > ? n

< rm ... ./admin.log002 > ? n

< rm ... ./admin.log042 > ? n

< rm ... ./admin.log942 > ? n

7.為了查詢當前檔案系統中的所有目錄並排序,可以用:

$ find . -type d  |sort

8.為了查詢系統中所有的r m t磁帶裝置,可以用:

$ find /dev/rmt -print

9.為了查詢當前檔案系統中的所有目錄並排序,可以用:

$ find . -type d |sort

# 2017-6-6黃樹茂 (自動刪除nfsbackup目錄下30天以上擴充套件名為gz的備份,)

# -type 查詢某一型別的檔案,諸如:

# b - 塊裝置檔案。d - 目錄。c - 字元裝置檔案。p - 管道檔案。l - 符號鏈結檔案。f - 普通檔案。

# 刪除下一行首#字元      

#find /home/nfsbackup -type f -name '*.gz' -mtime +30 -exec rm -f {} \;

shell find命令使用

語法格式 find 路徑 選項 操作 選項 name 按照檔名稱查詢 find etc name conf 查詢 etc目錄下以conf結尾的檔案 iname find iname aa 查詢當前目錄下檔名為aa的檔案,不區分大小寫 perm 按照許可權查詢 perm 755 finc perm 7...

shell find命令使用詳解

find 查詢檔案或目錄。語 法 find 目錄.amin 分鐘 anewer 參考檔案或目錄 atime 24小時數 cmin 分鐘 cnewer 參考檔案或目錄 ctime 24小時數 daystart depyh empty exec 執行指令 false fls 列表檔案 follow fp...

at 命令用法

at命令的用法 at列出在指定的時間和日期在計算機上執行的已計畫命令或計畫命令和程式。必須正在執行 計畫 服務才能使用 at 命令。at computername id delete delete yes at computername time interactive every date nex...