Shell指令碼四 find

2021-09-24 21:10:28 字數 4867 閱讀 8155

3、 使用exec或ok來執行shell命令

4、 find命令結合exec,ok的例子

5、 find命令結合xargs的例子

find pathname -options [-print -exec -ok …]
引數說明:

pathname: find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄,遞迴查詢。

-print: find命令將匹配的檔案輸出到標準輸出。

-exec: find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為』command』 {} ;,注意{}內部無空格,和\;之間含有乙個空格分隔符。

-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每乙個命令之前,都會給出提示,讓使用者來確定是否執行。

-name 按照檔名查詢檔案。

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

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

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

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

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

-nogroup 查詢無有效所屬組的檔案,即該檔案所屬的組在/etc/groups中不存在。

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

-newer file1 ! file2 查詢更改時間比檔案file1新但比檔案file2舊的檔案。

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

b - 塊裝置檔案。

d - 目錄。

c - 字元裝置檔案。

p - 管道檔案。

l - 符號鏈結檔案。

f - 普通檔案。

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

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

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

-mount 在查詢檔案時不跨越檔案系統mount點。

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

下面三個的區別:

-amin n 查詢系統中最後n分鐘訪問的檔案 

-atime n 查詢系統中最後n*24小時訪問的檔案

-cmin n 查詢系統中最後n分鐘被改變檔案狀態的檔案

-ctime n 查詢系統中最後n*24小時被改變檔案狀態的檔案

-mmin n 查詢系統中最後n分鐘被改變檔案資料的檔案

-mtime n 查詢系統中最後n*24小時被改變檔案資料的檔案

在自己的根目錄home中查詢檔案名符合∗.txt的檔案

find ~ -name "*.txt" -print
想要在當前目錄及子目錄中查詢所有的『 *.txt』檔案

find . -name "*.txt" -print
當前目錄及子目錄中查詢檔案名以乙個大寫字母開頭的檔案

find . -name "[a-z]*" -print
在當前目錄查詢檔案名以兩個小寫字母開頭,跟著是兩個數字,最後是.txt的檔案

find . -name "[a-z][a-z][0-9][0-9].txt" -print
在當前目錄下查詢檔案許可權位為755的檔案

find . -perm 755 -print
如果在查詢檔案時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查詢的檔案,那麼可以使用-prune選項來指出需要忽略的目錄。在使用-prune選項時要當心,因為如果你同時使用了-depth選項,那麼-prune選項就會被find命令忽略。

要在/home/c01cpp目錄下查詢不在dir1子目錄之內的所有檔案

find /home/c01cpp -path "/home/c01cpp/dir1" -prune -o -print
在/etc目錄下查詢檔案屬主為uucp的檔案

find /etc -user uucp -print
為了查詢屬主帳戶已經被刪除的檔案,可以使用-nouser選項。這樣就能夠找到那些屬主在/etc/passwd檔案中沒有有效帳戶的檔案。在使用-nouser選項時,不必給出使用者名稱;find命令能夠為你完成相應的工作。

例如,希望在/home目錄下查詢所有的這類檔案,可以用:

find /home -nouser -print

要查詢沒有有效所屬使用者組的所有檔案,從檔案系統的根目錄處查詢這樣的檔案

find / -nogroup -print
減號-來限定更改時間在距今n日以內的檔案,而用加號+來限定更改時間在距今n日以前的檔案。

在系統根目錄下查詢更改時間在5日以內的檔案

find / -mtime -5 -print
在/var/adm目錄下查詢更改時間在3日以前的檔案

find /var/adm -mtime +3 -print
在/etc目錄下查詢所有的目錄

find /etc -type d -print
在當前目錄下查詢除目錄以外的所有型別的檔案

find . ! -type d -print
在/etc目錄下查詢所有的符號鏈結檔案

find /etc -type l -print
在當前目錄下查詢檔案長度大於1 m位元組的檔案

find . -size +1000000c -print
在當前目錄下查詢長度超過10塊的檔案(一塊等於512位元組)

find . -size +10 -print
希望先匹配所有的檔案,再在子目錄中查詢

從檔案系統的根目錄開始,查詢乙個名為con.file的檔案,它將首先匹配所有的檔案然後再進入子目錄中查詢。

find / -name "con.file" -depth -print
exec選項後面跟隨著所要執行的命令或指令碼,然後是一對{},乙個空格和乙個\,最後是乙個分號。

在/logs目錄中查詢更改時間在5日以前的檔案並刪除它們

find logs -type f -mtime +5 -exec rm {} \;
或者使用ok

find . -name "*.conf" -mtime +5 -ok rm {} \;

< rm ... ./conf/httpd.conf > ? n

讓當前目錄中檔案屬主具有讀、寫許可權,並且檔案所屬組的使用者和其他使用者具有讀許可權的檔案

find . -type f -perm 644 -exec ls -l {} \;
為了查詢系統中所有檔案長度為0的普通檔案,並列出它們的完整路徑

find / -type f -size 0 -exec ls -l {} \;
查詢/var/logs目錄中更改時間在7日以前的普通檔案,並在刪除之前詢問它們

find /var/logs -type f -mtime +7 -ok rm {} \;
為了查詢系統中所有屬於root組的檔案

find . -group root -exec ls -l {} \;
為了查詢當前檔案系統中的所有目錄並排序

find . -type d | sort
有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令執行幾分鐘之後,就會出現 溢位錯誤。錯誤資訊通常是「引數列太長」或「引數列溢位」。

這就是xargs命令的用處所在,特別是與find命令一起使用。

find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。

使用xargs命令則只有乙個程序

查詢系統中的每乙個普通檔案,然後使用xargs命令來測試它們分別屬於哪類檔案

find . -type f -print | xargs file
在當前目錄下查詢所有使用者具有讀、寫和執行許可權的檔案,並收回相應的寫許可權

find . -perm -7 -print | xargs chmod o-w
用grep命令在所有的普通檔案中搜尋hello這個詞

find . -type f -print | xargs grep "hello"
用grep命令在當前目錄下的所有普通檔案中搜尋hello這個詞

find . -name \* -type f -print | xargs grep "hello"

shell指令碼 find命令

find命令用於查詢,功能很強大,格式如下 find pathname options print exec ok pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用 來表示系統根目錄。print find命令將匹配的檔案輸出到標準輸出。exec find命令對匹配的檔案執行...

shell指令碼之find

find pathname options print exec ok 引數pathname find命令所查詢的目錄路徑。例如用.來表示當前目錄,用 來表示系統根目錄。print find命令將匹配的檔案輸出到標準輸出。exec find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的...

Shell指令碼學習筆記 find

find pathname options print exec ok pathname find命令所查詢的目錄路徑。options 選項。print find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為 command ok 和exec的作用相同,只不過以一種更為安全的模式...