歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

linux————find的一些簡單命令

man文檔中給出的find命令的一般形式為:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

其實[-H] [-L] [-P] [-D debugopts] [-Olevel]這幾個選項並不常用(至少在我的日常工作中,沒有用到過),上面的find命令的常用形式可以簡化為:

find [path...] [expression] 即 :find 【路徑名】 【選項】 【查找的文件名或者目錄名】

- path:find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄

- expression:expression可以分為——“-options [-print -exec -ok ...]”

- -options,指定find命令的常用選項,下節詳細介紹

- -print,find命令將匹配的文件輸出到標准輸出

- -exec,find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格

- find ./ -size 0 -exec rm {} \; 刪除文件大小為零的文件 (還可以以這樣做:rm -i `find ./ -size 0` 或 find ./ -size 0 | xargs rm -f &)

- 為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec選項中:find . -type f -exec ls -l { } \;

- 在/logs目錄中查找更改時間在5日以前的文件並刪除它們:find /logs -type f -mtime +5 -exec rm { } \;

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

- find . -name "*.conf" -mtime +5 -ok rm { } \; 在當前目錄中查找所有文件名以.LOG結尾、更改時間在5日以上的文件,並刪除它們,只不過在刪除之前先給出提示

也有人這樣總結find命令的結構:

find start_directory test

options

criteria_to_match

action_to_perform_on_results

記住:對於路徑名來說,若想從某一目錄開始查找,則一定需要需要寫成絕對路徑的形式,但若以當前目錄開始查找,可以直接用“ . ”代替路徑名。eg:

對於當前目錄沒有這個文件或者同名的時候,直接執行find將不會返回任何值

find .:列出當前目錄下的所有文件和目錄

find /home/admin/text -name kuo :

顯示text目錄下所有同名字的文件或者文件名

find /home/admin/text -iname kuo:

顯示不區分大小寫的所有文件或文件名

find . -name "*.txt" -o -name "*.pdf" :

查找以 . txt和 . pdf為結尾的文件

匹配文件路徑或者文件: find /usr/ -path "*local*"

基於正則表達式匹配文件路徑 find . -regex ".*\(\.txt\|\.pdf\)$"

同上,但忽略大小寫

find . -iregex ".*\(\.txt\|\.pdf\)$"

否定參數:

找出/home下不是以.txt結尾的文件:

find /home ! -name "*.txt"

根據文件類型進行搜索 :類型參數列表: f 普通文件 l 符號連接 d 目錄 c 字符設備 b 塊設備 s 套接字 p Fifo

find . -type 【類型參數】

基於目錄深度搜索 :

向下最大深度限制為3

find . -maxdepth 3 -type f

搜索出深度距離當前目錄至少2個子目錄的所有文件

find . -mindepth 2 -type f

根據文件時間戳進行搜索:find . -type f 時間戳

UNIX/Linux文件系統每個文件都有三種時間戳:

訪問時間 (-atime/天,-amin/分鐘):用戶最近一次訪問時間。修改時間 (-mtime/天,-mmin/分鐘):文件最後一次修改時間。

變化時間 (-ctime/天,-cmin/分鐘):文件數據元(例如權限等)最後一次修改時間。搜索最近2天內被訪問過的所有文件

find . -type f -atime -2

搜索恰好在七天前被訪問過的所有文件

find . -type f -atime 7

搜索超過七天內被訪問過的所有文件

find . -type f -atime +7

索訪問時間超過10分鐘的所有文件

find . -type f -amin +10

找出比file.log修改時間更長的所有文件

find . -type f -newer file.log

根據文件大小進行匹配 :文件大小單元: b —— 塊(512字節) c —— 字節 w —— 字(2字節) k —— 千字節 M —— 兆字節 G —— 吉字節

find . -type f -size [文件大小單元]

搜索大於10KB的文件

find . -type f -size +10k

搜索小於10KB的文件

find . -type f -size -10k

搜索等於10KB的文件

find . -type f -size 10k

刪除匹配文件刪除當前目錄下所有.txt文件

find . -type f -name "*.txt" -delete

根據文件權限/所有權進行匹配當前目錄下搜索出權限為777的文件

find . -type f -perm 777

找出當前目錄下權限不是644的php文件

find . -type f -name "*.php" ! -perm 644

找出當前目錄用戶tom擁有的所有文件

find . -type f -user tom

找出當前目錄用戶組sunk擁有的所有文件

find . -type f -group sunk

借助-exec選項與其他命令結合使用找出當前目錄下所有root的文件,並把所有權更改為用戶tom

find .-type f -user root -exec chown tom {} \;

上例中,{} 用於與-exec選項結合使用來匹配所有文件,然後會被替換為相應的文件名。

找出自己家目錄下所有的.txt文件並刪除

find $HOME/. -name "*.txt" -ok rm {} \;

上例中,-ok和-exec行為一樣,不過它會給出提示,是否執行相應的操作。

查找當前目錄下所有.txt文件並把他們拼接起來寫入到all.txt文件中

find . -type f -name "*.txt" -exec cat {} \;> all.txt

將30天前的.log文件移動到old目錄中 find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

找出當前目錄下所有.txt文件並以“File:文件名”的形式打印出來

find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

因為單行命令中-exec參數中無法使用多個命令,以下方法可以實現在-exec之後接受多條命令

-exec ./text.sh {} \;

搜索但跳出指定的目錄 查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk

find . -path "./sk" -prune -o -name "*.txt" -print

find其他技巧收集 要列出所有長度為零的文件find . -empty

Copyright © Linux教程網 All Rights Reserved