- find的基本格式
- find [path] [expressioin]
- 常用的選項
- path:find 查找路徑。如果未指定,則默認為當前工作目錄。
- Expression:用于定義find查找的表達式,表達式通常由選項、測式和動作3類參數組成。
- 常用的選項說明
- help:獲得幫助信息
- depth:先從當前目錄中查找,然后再從當目錄的子目錄中查找
- maxdepth LEVELS:向下搜索到第LEVELS層目錄,當LEVELS=0時表示只在當前目錄查找。
- mindepth LEVELS:至少向下搜索LEVELS層目錄
- mount:不搜索遠程文件系統
- follow:搜索如果遇到鏈接文件就連鏈接所指向的文件一並檢查。
- 常用的測試參數
- name:按文件名查找
- perm:按文件權限查找
- type:查找某一類型的文件
- mtime+n-n:按文件的修改的時間查找,+n表示修改時間距現在n天以前,-n表示修改時間距現在n天以內。
- atime+n-n:按文件的訪問時間找文件(使用方法同上)
- size n[c]:查找文件長度為n塊的文件,c表示文件大小為n字節的文件
- User:按文件屬主查找
- group:按文件的群組查找
- nouser:查找沒有有效屬主的文件
- nogroup:查找沒有有效群組的文件
- 動作參數指定find命令如何查找和處理查找到的文件,常用的動作有如下4種
- prune:不在指定目錄中查找
- print:將查找到的文件輸出到標準輸出
- exec:對查找到的文件執行exec動作後附帶的shell命令
- ok:對查找到的文件執行ok動作後附帶的shell命令,在每次執行前將提示用戶是否執行。
- find有許屬參,大多數情況下,使用該命令都至少要包含一個測式和一個動作,才能完成整個查找任務。
- 範例:
- 按文件名稱查找
- find /etc -name "smb.conf" -print
- find /etc -name "*.conf" -print
- find -name "message" -print
- 上行是在當前的目錄中查找
- 查找前2個字符是小寫字母,第3個字符是數字,最後.d的文件
- find /etc -name "[a-z][a-z][0-9].d" -print
- 使用find命令查找文件時,使用操作符&將其放到後台運行
- find / -name "*.conf" -print &
- 按文件權限查找
- perm參數可以按照文件的權限進行查,使用此參數時,需要使用8進制表示權限。
- 8進制的基本說明:4讀的權限;2寫的權限;1執行的權限
- 查找權限為644的文件
- find / -perm 644 -print
- 在當前目錄的file子中查找權限中包點其他用戶可讀、寫、執行的文件
- find ./file -perm -007 -print
- 按文件類型查找
- 查找/dev目錄中的字符設備,其中c很示字符設備
- find /dev -type c -print
- 查找目錄/dev中的塊設備文件,其中b表示塊設備文件
- find /dev -type b -print
- 查找目錄/etc中除了鏈接文件以外的文件
- find /etc ! -type l -print
- 其他的type,其實於ls命令的格式中的文件類型標識一致,d-->目錄;l-->鏈接文件
- 按文件的時間和大小查找
- 使用+n限定時間在n天以前;使用-n限定時間在n天以內。
- 使用-7指定修改時間在7天以內的文件
- find /etc -mtime -7 -print
- 使用+1指定修改時間在1天以前的文件
- find /etc -mtime +1 -print
- 使用atime -10 指定訪問時間在10天以內的文件
- find /etc -atime -10 -print
- 按長度查找文件
- 當前目錄下查找文件長度大於10MB的文件
- find . -size +10000000c -print
- 使用-30 表示文件長度小於30塊(512*30=15kb)的文件
- find . -size -30 -print
- 按文件屬主或屬組查找
- 使用user參查找屬主為canred的文件
- find / -user canred -print
- 使用nouser的參數查找沒有有效屬主的文件
- find / -nouser -print
- 使用group的參數查找屬組為admin的文件
- find / -group admin -print
- 使用nogroup的參數查找沒有有效屬組的文件
- find / -nogroup -print
- 忽略目錄參數prune
- 使用path,prune和name參數指定在除了/etc以外的整個目錄中查找以.conf結尾的配置文件
- find / -path "/etc" -prune -o -name "*.conf" -print
- -o是說:將2個不同的參數連接起來
- 忽略遠程文件系統參數mount
- 如果系統上掛載有遠程文件系統,搜索視程文件系統不僅要花費大量的網絡資源及時間,這時可以使用mount參數忽略掛載的遠程文件系統
- 使用mount參數忽略遠程文件系統
- find / -name "file" -mount -print
- 注意:在使用prune參數查找文件時,如果同恃使用了depth參數,find會將prune參數忽略
- 使用exec和ok處理查找到的文件
- exec、ok參數執行shell命令的格式如下:
- -exec [shell命令] {} \;
- -ok [Shell] {} \;
- 在當前目錄的backup_sys子目錄中,查找修改時間在一周以前,以message開頭的文件然後將找到的文件交給ls -l命令
- find ./backup_sys -name "message*" -mtime +7 -exec ls -l {} \;
- 查找修改時間在2週以前的文件,並使用exec參數將找到的文件交給rm命令刪除
- find ./backup_sys -name "message*" -mtime +14 -exec rm {} \;
- 也可以把上例改成ok如下
- find ./backup_sys -name "message*" -mtime +14 -ok rm {} \;
- 使用xargs命令處理查找到的文件
- 利用exec 、 ok參數處理查找到的文件時,存在了一些缺陷
- 系統對參數exec、ok傳遞給shell命令的文件列表長度有一定的限制。當find命令查找到的文件數量很多時,會出現參數列表溢出錯誤。
- 參數對find命令找到的每一個文件發起一個相應的處理進程,當find命令查找到的文件數量很多時,可能會影響整個系統性能
- xargs命令的作用是構造一個參數列表並交給命令執行。與參數exec、ok相比,xargs不會一次獲取並處理find找到的所有文件,而是每次只獲取並處理其中的一部份。處理完後再獲取下一部分,直至結束。整個過程xargs都只發起一個處理進程,對系統性能的影響很小。
- 使用管道將找到的文件列表交給xargs命令分割之後使用rm命令刪除
- find ./backup_sys -name "message*" -mtime +14 -print | xargs rm
- find工具應用實例
- 1.使用find查找需要備份的文件
- 第一次完成備份
- tar -czf /backup/file_backup_20130309.tgz /file
- 第二次之後就是差異備份
- find /file -type f -mtime -1 -print > /backup/file_list
- 使用tar命令備份/backup/file_list中記錄的文件
- tar -czT /backup/file_list -f /backup/file_backup_20130310.tgz
- 刪除使用過的文件列表
- rm /backup/file_list
- 2.刪除過期文件
- find . -mtime +14 -exec rm {} \;
2013年3月9日 星期六
find 指令
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言