課程
/運維&測試
/Linux
/ Linux達人養(yǎng)成計劃 I
請同學們跟帖回復。
2014-12-01
源自: Linux達人養(yǎng)成計劃 I 4-3
正在回答
find命令中的尋找條件可以是一個用邏輯運算符 not、and、or 組成的復合條件。邏輯運 算符 and、or、not。
(1) and:邏輯與,在命令中用“-a”表示,是系統(tǒng)缺省的選項,表示只有當所給的條 件都滿足時,尋找條件才算滿足。
例如:
find –name ’tmp’ –xtype c -user ’inin’
該命令尋找三個給定條件都滿足的所有文件
(2) or:邏輯或,在命令中用“-o”表示。該運算符表示只要所給的條件中有一個滿足 時,尋找條件就算滿足。
find –name ’tmp’ –o –name ’mina*’
該命令查詢文件名為’tmp’或是匹配’mina*’的所有文件。
(3) not:邏輯非,在命令中用“!”表示。該運算符表示查找不滿足所給條件的文件 。
find ! –name ’tmp’
該命令查詢文件名不是’tmp’的所有文件。
與大多數(shù) UNIX 命令一樣,UNIX?find?命令具有一長串令人生畏的選項和開關(guān),它們會阻礙人們深入地學習該命令,但正是因為其范圍廣闊,真正的 Explorer 并不會被它們嚇倒。一條好的通用原則在簡化一個復雜問題時都會經(jīng)過漫長的過程。啟動一個 xterm,并嘗試執(zhí)行下面的命令:
?
$ find . -name *.gif -exec ls {} \;? ?
-exec?參數(shù)中包含了真正有價值的操作。當查找到匹配搜索條件的文件時,-exec?參數(shù)定義了將對這些文件進行什么操作。該示例告訴計算機進行如下操作:
從當前文件夾開始往下搜索,緊跟在find?之后,使用點號 (.)。定位所有名稱以 .gif 結(jié)尾的文件(圖形文件)。列出所有查找到的文件,使用ls命令。
需要對?-exec?參數(shù)進行更深入地研究。當查找到匹配搜索條件的文件名時,find?命令執(zhí)行l(wèi)s {}字符串,用文件名和路徑代替文本{}.?假設在搜索中查找到 saturn.gif 文件,find?將執(zhí)行如下所示的命令:
$ ls ./gif_files/space/solar_system/saturn.gif? ?
本文余下的內(nèi)容建立在這條一般原則之上:仔細地使用?find?命令可以讓 UNIX 文件系統(tǒng)的管理工作變得更加容易。例如,如果您使用了?-fstype?參數(shù),find?命令可以根據(jù)查找到的文件所處的文件系統(tǒng)的類型來對命令進行相應的處理。在?find命令對查找到的文件執(zhí)行相應命令前將對您進行提示,這通常是非常有用的,您可以使用?-ok?參數(shù)告訴它繼續(xù)執(zhí)行該操作,接下來我們將對其進行介紹。
可選的執(zhí)行
-ok是 -exec 參數(shù)的一個重要的替代項,它的行為和?-exec一樣,但它會提示您是否要對文件運行相應的命令。假設您想要刪除 home 目錄中的大部分 .txt 文件,但希望能夠逐個文件地執(zhí)行該操作。像 UNIX 中的?rm命令那樣的刪除操作是很危險的,因為當使用像find這樣的自動化處理方式來查找文件時,它可能一不小心會刪除重要的文件,您也許希望在刪除這些系統(tǒng)查找到的文件之前對其進行仔細檢查。
下面的命令列出了您的 home 目錄中所有的 .txt 文件。要刪除這些文件,必須在?find?命令通過列出文件名提示您確認操作時輸入?Y?或者?y:
$ find $HOME/. -name *.txt -ok rm {} \;? ?
它列出了查找到的每個文件,并且系統(tǒng)將暫停以等待您輸入?Y或者?y.?如果您按下?Enter?鍵,系統(tǒng)將不會刪除該文件
1.命令格式:
find pathname -options [-print -exec -ok ...]
2.命令功能:
用于在文件樹種查找文件,并作出相應的處理
3.命令參數(shù):
pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。?-print: find命令將匹配的文件輸出到標準輸出。?-exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為'command' {? } \;,注意{?? }和\;之間的空格。?-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
4.命令選項:
-name?? 按照文件名查找文件。-perm?? 按照文件權(quán)限來查找文件。-prune? 使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。-user?? 按照文件屬主來查找文件。-group? 按照文件所屬的組來查找文件。-mtime -n +n? 按照文件的更改時間來查找文件, - n表示文件更改時間距現(xiàn)在n天以內(nèi),+ n表示文件更改時間距現(xià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時表示文件長度以字節(jié)計。-depth:在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。-fstype:查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通??梢栽谂渲梦募?etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。-mount:在查找文件時不跨越文件系統(tǒng)mount點。-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。
另外,下面三個的區(qū)別:
-amin n?? 查找系統(tǒng)中最后N分鐘訪問的文件-atime n? 查找系統(tǒng)中最后n*24小時訪問的文件-cmin n?? 查找系統(tǒng)中最后N分鐘被改變文件狀態(tài)的文件-ctime n? 查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件-mmin n?? 查找系統(tǒng)中最后N分鐘被改變文件數(shù)據(jù)的文件-mtime n? 查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件
find命令是一個在UNIX文件系統(tǒng)中查找文件的常用命令,可以進行很多條件查找。語法: find 路徑 約束條件
如何查找在文件名中含有指定關(guān)鍵字的文件?
下面這條命令查找在“/etc”目錄下所有文件名中含有“mail”的文件。?
# find /etc -name "*mail*"??
如何查找文件大小超過指定值的文件?
下面這個命令會列出系統(tǒng)中所有大于100M的文件
# find / -type f -size +100M
如何查找在最近幾天沒有被修改過的文件?
下面這條命令會列出在當前目錄下在最近60天沒有被修改過文件
# find . -mtime +60
如何查找在最近幾天被修改的文件?
下面這條命令會列出在當前目錄下在最近2天被修改過文件
# find . –mtime -2
如何刪除擴展名為.tar.gz并且大于100M的壓縮文件?
當你不想意外刪除文件時,那么當執(zhí)行下列命令要小心點。最好的方法是利用“l(fā)s -l”去執(zhí)行下列相同命令以確保當執(zhí)行rm命令時,你知道什么文件會被刪除。
# find / -type f -name *.tar.gz -size +100M -exec ls -l {} \;?
# find / -type f -name *.tar.gz -size +100M -exec rm -f {} \;
如何對最近幾天沒有被修改的文件進行存檔?
下面的命令查找到在“/home/jsmith”目錄下最近60天沒有被修改的文件并且在“/tmp”下創(chuàng)建一個格式為“ddmmyyyy_archive.tar”的歸檔文件
# find /home/jsmith -type f -mtime +60 | xargs tar -cvf /tmp/`date '+%d%m%Y'_archive.tar`
查找指定時間內(nèi)修改過的文件
命令:?????????? find -atime -2
根據(jù)關(guān)鍵字查找
命令:
find . -name "*.log"
按照目錄或文件的權(quán)限來查找文件
find /opt/soft/test/ -perm 777
按類型查找
find . -type f -name "*.log"
查找當前所有目錄并排序
find . -type d | sort
按大小查找文件
find . -size +1000c -print
find 功能強大,但速度慢
要進行模糊查詢就要使用以下的通配符:
* 匹配任意內(nèi)容? 匹配任意一個字符[] 匹配任意一個中括號內(nèi)的字符
下面是網(wǎng)上查詢的知識:
-name?? filename???????????? #查找名為filename的文件-perm??????????????????????? #按執(zhí)行權(quán)限來查找-user??? username???????????? #按文件屬主來查找-group groupname??????????? #按組來查找-mtime?? -n +n??????????????? #按文件更改時間來查找文件,-n指n天以內(nèi),+n指n天以前-atime??? -n +n?????????????? #按文件訪問時間來查GIN: 0px">
-ctime??? -n +n????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前
-nogroup???????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在-nouser???????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存-newer?? f1 !f2????????????? 找文件,-n指n天以內(nèi),+n指n天以前?-ctime??? -n +n?????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前?-nogroup???????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在-nouser????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存-newer?? f1 !f2?????????????? #查更改時間比f1新但比f2舊的文件-type??? b/d/c/p/l/f???????? #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件-size????? n[c]?????????????? #查長度為n塊[或n字節(jié)]的文件-depth?????????????????????? #使查找在進入子目錄前先行查找完本目錄-fstype???????????????????? #查更改時間比f1新但比f2舊的文件-type??? b/d/c/p/l/f???????? #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件-size????? n[c]?????????????? #查長度為n塊[或n字節(jié)]的文件-depth?????????????????????? #使查找在進入子目錄前先行查找完本目錄-fstype????????????????????? #查位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通???在/etc/fstab中找到-mount?????????????????????? #查文件時不跨越文件系統(tǒng)mount點-follow????????????????????? #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件-cpio??????????????? %;????? #查位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通???在/etc/fstab中找到-mount?????????????????????? #查文件時不跨越文件系統(tǒng)mount點-follow????????????????????? #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件-cpio??????????????????????? #對匹配的文件使用cpio命令,將他們備份到磁帶設備中-prune?????????????????????? #忽略某個目錄
Linux中find常見用法示例
·find ?? path??? -option??? [??? -print ]??? [ -exec??? -ok??? command ]??? {} \;#-print 將查找到的文件輸出到標準輸出#-exec??? command??? {} \;?????? -----將查到的文件執(zhí)行command操作,{} 和 \;之間有空格#-ok 和-exec相同,只不過在操作前要詢用戶 ==================================================== -name??? filename?????????????? #查找名為filename的文件-perm???????????????????????? #按執(zhí)行權(quán)限來查找-user???? username????????????? #按文件屬主來查找-group groupname????????????? #按組來查找-mtime??? -n +n???????????????? #按文件更改時間來查找文件,-n指n天以內(nèi),+n指n天以前-atime???? -n +n??????????????? #按文件訪問時間來查GIN: 0px">-perm????????????????????????? #按執(zhí)行權(quán)限來查找-user???? username????????????? #按文件屬主來查找-group groupname????????????? #按組來查找-mtime??? -n +n???????????????? #按文件更改時間來查找文件,-n指n天以內(nèi),+n指n天以前-atime???? -n +n??????????????? #按文件訪問時間來查找文件,-n指n天以內(nèi),+n指n天以前 -ctime???? -n +n??????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前 -nogroup????????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在-nouser?????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存-newer??? f1 !f2??????????????? 找文件,-n指n天以內(nèi),+n指n天以前 -ctime???? -n +n??????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前 -nogroup????????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在-nouser?????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存-newer??? f1 !f2??????????????? #查更改時間比f1新但比f2舊的文件-type????? b/d/c/p/l/f????????? #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件-size?????? n[c]??????????????? #查長度為n塊[或n字節(jié)]的文件-depth??????????????????????? #使查找在進入子目錄前先行查找完本目錄-fstype?????????????????????? #查更改時間比f1新但比f2舊的文件-mount??????????????????????? #查文件時不跨越文件系統(tǒng)mount點-follow?????????????????????? #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件-cpio???????????????????????? #對匹配的文件使用cpio命令,將他們備份到磁帶設備中-prune??????????????????????? #忽略某個目錄 ====================================================$find??? ~??? -name??? "*.txt"??? -print????? #在$HOME中查.txt文件并顯示$find??? .???? -name??? "*.txt"??? -print$find??? .???? -name??? "[A-Z]*"??? -pri26nbsp;???? #對匹配的文件使用cpio命令,將他們備份到磁帶設備中-prune??????????????????????????????? #忽略某個目錄 $find??? .???? -name??? "[A-Z]*"??? -print??? #查以大寫字母開頭的文件$find??? /etc??? -name??? "host*"??? -print #查以host開頭的文件$find??? .??? -name??? "[a-z][a-z][0--9][0--9].txt"???? -print??? #查以兩個小寫字母和兩個數(shù)字開頭的txt文件$find .??? -perm??? 755??? -print$find??? .??? -perm -007??? -exec ls -l {} \;??? #查所有用戶都可讀寫執(zhí)行的文件同-perm 777$find??? . -type d??? -print?? 打印目錄結(jié)構(gòu)$find??? .?? !??? -type??? d??? -print??打印非目錄文件 find /usr/include -name '*.h' -exec grep AF_INEF6 {} \; 因grep無法遞歸搜索子目錄,故可以和find相結(jié)合使用。 在/usr/include 所有子目錄中的.h文件中找字串AF_INEF6$find??? .??? -type l??? -print $find??? .??? -size??? +1000000c??? -print???????? #查長度大于1Mb的文件$find??? .??? -size??? 100c????????? -print??????? # 查長度為100c的文件$find??? .??? -size??? +10??? -print?????????????? #查長度超過期作廢10塊的文件(1塊=512字節(jié)) $cd /$find??? etc??? home??? apps???? -depth??? -print??? | cpio??? -ivcdC65536??? -o??? /dev/rmt0$find??? /etc -name "passwd*"??? -exec grep??? "cnscn"??? {}??? \;??? #看是否存在cnscn用戶$find . -name "yao*"??? | xargs file$find??? . -name "yao*"??? |??? xargs??? echo???? "" > /tmp/core.log$find??? . -name "yao*"??? | xargs??? chmod??? o-w ====================================================== find??? -name april*??????????????????????? 在當前目錄下查找以april開始的文件find??? -name??? april*??? fprint file????????? 在當前目錄下查找以april開始的文件,并把結(jié)果輸出到file中find??? -name ap* -o -name may*??? 查找以ap或may開頭的文件find??? /mnt??? -name tom.txt??? -ftype vfat??? 在/mnt下查找名稱為tom.txt且文件系統(tǒng)類型為vfat的文件find??? /mnt??? -name t.txt ! -ftype vfat???? 在/mnt下查找名稱為tom.txt且文件系統(tǒng)類型不為vfat的文件find??? /tmp??? -name wa* -type l???????????? 在/tmp下查找名為wa開頭且類型為符號鏈接的文件find??? /home??? -mtime??? -2?????????????????? 在/home下查最近兩天內(nèi)改動過的文件find /home???? -atime -1??????????????????? 查1天之內(nèi)被存取過的文件find /home -mmin???? +60??????????????????? 在/home下查60分鐘前改動過的文件find /home??? -amin??? +30??????????????????? 查最近30分鐘前被存取過的文件find /home??? -newer??? tmp.txt?????????????? 在/home下查更新時間比tmp.txt近的文件或目錄find /home??? -anewer??? tmp.txt????????????? 在/home下查存取時間比tmp.txt近的文件或目錄find??? /home??? -used??? -2??????????????????? 列出文件或目錄被改動過之后,在2日內(nèi)被存取過的文件或目錄find??? /home??? -user cnscn????????????????? 列出/home目錄內(nèi)屬于用戶cnscn的文件或目錄find??? /home??? -uid??? +501?????????????????? 列出/home目錄內(nèi)用戶的識別碼大于501的文件或目錄find??? /home??? -group??? cnscn??????????????? 列出/home內(nèi)組為cnscn的文件或目錄find??? /home??? -gid 501???????????????????? 列出/home內(nèi)組id為501的文件或目錄find??? /home??? -nouser????????????????????? 列出/home內(nèi)不屬于本地用戶的文件或目錄find??? /home??? -nogroup???????????????????? 列出/home內(nèi)不屬于本地組的文件或目錄find??? /home???? -name tmp.txt???? -maxdepth??? 4??? 列出/home內(nèi)的tmp.txt 查時深度最多為3層find??? /home??? -name tmp.txt??? -mindepth??? 3??? 從第2層開始查find??? /home??? -empty?????????????????????? 查找大小為0的文件或空目錄find??? /home??? -size??? +512k???????????????? 查大于512k的文件find??? /home??? -size??? -512k???????????????? 查小于512k的文件find??? /home??? -links??? +2?????????????????? 查硬連接數(shù)大于2的文件或目錄find??? /home??? -perm??? 0700????????????????? 查權(quán)限為700的文件或目錄find??? /tmp??? -name tmp.txt??? -exec cat {} \;find??? /tmp??? -name??? tmp.txt??? -ok??? rm {} \; find???? /??? -amin???? -10???????? # 查找在系統(tǒng)中最后10分鐘訪問的文件find???? /??? -atime??? -2?????????? # 查找在系統(tǒng)中最后48小時訪問的文件find???? /??? -empty??????????????? # 查找在系統(tǒng)中為空的文件或者文件夾find???? /??? -group??? cat????????? # 查找在系統(tǒng)中屬于 groupcat的文件find???? /??? -mmin??? -5?????????? # 查找在系統(tǒng)中最后5分鐘里修改過的文件find???? /??? -mtime??? -1????????? #查找在系統(tǒng)中最后24小時里修改過的文件find???? /??? -nouser?????????????? #查找在系統(tǒng)中屬于作廢用戶的文件find???? /??? -user???? fred???????? #查找在系統(tǒng)中屬于FRED這個用戶的文件
1、find命令的一般形式為;
2、find命令的參數(shù);
pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。
-print: find命令將匹配的文件輸出到標準輸出。
-exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為'command' { } ;,注意{ }和;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
3、find命令選項
-name
按照文件名查找文件。
-perm
按照文件權(quán)限來查找文件。
-prune
使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。
-user
按照文件屬主來查找文件。
-group
按照文件所屬的組來查找文件。
-mtime -n +n
按照文件的更改時間來查找文件, - n表示文件更改時間距現(xiàn)在n天以內(nèi),+ n表示文件更改時間距現(xià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時表示文件長度以字節(jié)計。-depth:在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。
-fstype:查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通??梢栽谂渲梦募?etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。
-mount:在查找文件時不跨越文件系統(tǒng)mount點。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。
-amin n
查找系統(tǒng)中最后N分鐘訪問的文件
-atime n
查找系統(tǒng)中最后n*24小時訪問的文件
-cmin n
查找系統(tǒng)中最后N分鐘被改變文件狀態(tài)的文件
-ctime n
查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件
-mmin n
查找系統(tǒng)中最后N分鐘被改變文件數(shù)據(jù)的文件
-mtime n
查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件
4、使用exec或ok來執(zhí)行shell命令
使用find命令時,只要把想要的操作寫在一個文件里,就可以用exec來配合find命令查找,很方便的
在有些操作系統(tǒng)中只允許-exec選項執(zhí)行諸如l s或ls -l這樣的命令。大多數(shù)用戶使用這一選項是為了查找舊文件并刪除它們。建議在真正執(zhí)行rm命令刪除文件之前,最好先用ls命令看一下,確認它們是所要刪除的文件。
exec選項后面跟隨著所要執(zhí)行的命令或腳本,然后是一對兒{ },一個空格和一個,最后是一個分號。為了使用exec選項,必須要同時使用print選項。如果驗證一下find命令,會發(fā)現(xiàn)該命令只輸出從當前路徑起的相對路徑及文件名。
例如:為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec選項中
# find . -type f -exec ls -l { } ;
-rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic
-rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README
上面的例子中,find命令匹配到了當前目錄下的所有普通文件,并在-exec選項中使用ls -l命令將它們列出。
在/logs目錄中查找更改時間在5日以前的文件并刪除它們:
$ find logs -type f -mtime +5 -exec rm { } ;
記?。涸趕hell中用任何方式刪除文件之前,應當先查看相應的文件,一定要小心!當使用諸如mv或rm命令時,可以使用-exec選項的安全模式。它將在對每個匹配到的文件進行操作之前提示你。
在下面的例子中, find命令在當前目錄中查找所有文件名以.LOG結(jié)尾、更改時間在5日以上的文件,并刪除它們,只不過在刪除之前先給出提示。
$ find . -name "*.conf" -mtime +5 -ok rm { } ;
< rm ... ./conf/httpd.conf > ? n
按y鍵刪除文件,按n鍵不刪除。
任何形式的命令都可以在-exec選項中使用。
在下面的例子中我們使用grep命令。find命令首先匹配所有文件名為“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后執(zhí)行g(shù)rep命令看看在這些文件中是否存在一個sam用戶。
# find /etc -name "passwd*" -exec grep "sam" { } ;
sam:x:501:501::/usr/sam:/bin/bash
find命令的例子;
1、查找當前用戶主目錄下的所有文件:
下面兩種方法都可以使用
$ find $HOME -print
$ find ~ -print
2、讓當前目錄中文件屬主具有讀、寫權(quán)限,并且文件所屬組的用戶和其他用戶具有讀權(quán)限的文件;
$ find . -type f -perm 644 -exec ls -l { } ;
3、為了查找系統(tǒng)中所有文件長度為0的普通文件,并列出它們的完整路徑;
$ find / -type f -size 0 -exec ls -l { } ;
4、查找/var/logs目錄中更改時間在7日以前的普通文件,并在刪除之前詢問它們;
$ find /var/logs -type f -mtime +7 -ok rm { } ;
5、為了查找系統(tǒng)中所有屬于root組的文件;
$find . -group root -exec ls -l { } ;
-rw-r--r-- 1 root root 595 10月 31 01:09 ./fie1
6、find命令將刪除當目錄中訪問時間在7日以來、含有數(shù)字后綴的admin.log文件。
該命令只檢查三位數(shù)字,所以相應文件的后綴不要超過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、為了查找當前文件系統(tǒng)中的所有目錄并排序;
$ find . -type d | sort
8、為了查找系統(tǒng)中所有的rmt磁帶設備;
$ find /dev/rmt -print
xargs
xargs - build and execute command lines from standard input
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執(zhí)行。但有些系統(tǒng)對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之后,就會出現(xiàn)溢出錯誤。錯誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。
在有些系統(tǒng)中,使用-exec選項會為處理每一個匹配到的文件而發(fā)起一個相應的進程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行;這樣在有些情況下就會出現(xiàn)進程過多,系統(tǒng)性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會根據(jù)該命令的選項及系統(tǒng)內(nèi)核中相應的可調(diào)參數(shù)來確定。
來看看xargs命令是如何同find命令一起使用的,并給出一些例子。
下面的例子查找系統(tǒng)中的每一個普通文件,然后使用xargs命令來測試它們分別屬于哪類文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text
......
在整個系統(tǒng)中查找內(nèi)存信息轉(zhuǎn)儲文件(core dump) ,然后把結(jié)果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
上面這個執(zhí)行太慢,我改成在當前目錄下查找
#find . -name "file*" -print | xargs echo "" > /temp/core.log
# cat /temp/core.log
./file6
在當前目錄下查找所有用戶具有讀、寫和執(zhí)行權(quán)限的文件,并收回相應的寫權(quán)限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
用grep命令在所有的普通文件中搜索hostname這個詞:
# find . -type f -print | xargs grep "hostname"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
用grep命令在當前目錄下的所有普通文件中搜索hostnames這個詞:
# find . -name * -type f -print | xargs grep "hostnames"
注意,在上面的例子中, 用來取消find命令中的*在shell中的特殊含義。
find命令配合使用exec和xargs可以使用戶對所匹配到的文件執(zhí)行幾乎所有的命令。
find命令的一般形式為: ??
參數(shù)說明:
-print: ? find命令將匹配的文件輸出到標準輸出。
-exec: ? ?find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為"command { } \; ",注意"{ }"和“\;”之間的空格。
$find?? ~?? -name?? "*.txt"?? -print??? #在$HOME中查.txt文件并顯示$find?? .??? -name?? "*.txt"?? -print$find?? .??? -name?? "[A-Z]*"?? -print?? #查以大寫字母開頭的文件$find?? /etc?? -name?? "host*"?? -print #查以host開頭的文件$find?? .?? -name?? "[a-z][a-z][0–9][0–9].txt"??? -print?? #查以兩個小寫字母和兩個數(shù)字開頭的txt文件$find .?? -perm?? 755?? -print$find?? .?? -perm -007?? -exec ls -l {} \;?? #查所有用戶都可讀寫執(zhí)行的文件同-perm 777$find?? . -type d?? -print$find?? .?? !?? -type?? d?? -print?$find?? .?? -type l?? -print
$find?? .?? -size?? +1000000c?? -print??????? #查長度大于1Mb的文件$find?? .?? -size?? 100c???????? -print?????? # 查長度為100c的文件$find?? .?? -size?? +10?? -print????????????? #查長度超過期作廢10塊的文件(1塊=512字節(jié))$find?? etc?? home?? apps??? -depth?? -print?? | cpio?? -ivcdC65536?? -o?? /dev/rmt0$find?? /etc -name "passwd*"?? -exec grep?? "cnscn"?? {}?? \;?? #看是否存在cnscn用戶$find . -name "yao*"?? | xargs file$find?? . -name "yao*"?? |?? xargs?? echo??? "" > /tmp/core.log$find?? . -name "yao*"?? | xargs?? chmod?? o-w
舉報
Linux入門視頻教程,以通俗易懂的語言帶你感受linux之美
36 回答1.自行查找資料, 對grep命令進行擴充學習.[自學]
20 回答2.設計一個與find命令相關(guān)的小項目.SZEZ
1 回答find命令
27 回答3.是列舉所學的通配符,并解釋其含義?針對每一個通配符,書寫一條find命令,并給出簡要解釋。SZEZ
2 回答find命令-o -exec沒有正常執(zhí)行
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2014-12-01
find命令中的尋找條件可以是一個用邏輯運算符 not、and、or 組成的復合條件。邏輯運 算符 and、or、not。
(1) and:邏輯與,在命令中用“-a”表示,是系統(tǒng)缺省的選項,表示只有當所給的條 件都滿足時,尋找條件才算滿足。
例如:
find –name ’tmp’ –xtype c -user ’inin’
該命令尋找三個給定條件都滿足的所有文件
(2) or:邏輯或,在命令中用“-o”表示。該運算符表示只要所給的條件中有一個滿足 時,尋找條件就算滿足。
例如:
find –name ’tmp’ –o –name ’mina*’
該命令查詢文件名為’tmp’或是匹配’mina*’的所有文件。
(3) not:邏輯非,在命令中用“!”表示。該運算符表示查找不滿足所給條件的文件 。
例如:
find ! –name ’tmp’
該命令查詢文件名不是’tmp’的所有文件。
2014-12-01
與大多數(shù) UNIX 命令一樣,UNIX?find?命令具有一長串令人生畏的選項和開關(guān),它們會阻礙人們深入地學習該命令,但正是因為其范圍廣闊,真正的 Explorer 并不會被它們嚇倒。一條好的通用原則在簡化一個復雜問題時都會經(jīng)過漫長的過程。啟動一個 xterm,并嘗試執(zhí)行下面的命令:
?
$ find . -name *.gif -exec ls {} \;
? ?
?
-exec?參數(shù)中包含了真正有價值的操作。當查找到匹配搜索條件的文件時,-exec?參數(shù)定義了將對這些文件進行什么操作。該示例告訴計算機進行如下操作:
從當前文件夾開始往下搜索,緊跟在find?之后,使用點號 (.)。定位所有名稱以 .gif 結(jié)尾的文件(圖形文件)。列出所有查找到的文件,使用ls命令。
?
需要對?-exec?參數(shù)進行更深入地研究。當查找到匹配搜索條件的文件名時,find?命令執(zhí)行l(wèi)s {}字符串,用文件名和路徑代替文本{}.?假設在搜索中查找到 saturn.gif 文件,find?將執(zhí)行如下所示的命令:
?
$ ls ./gif_files/space/solar_system/saturn.gif
? ?
?
本文余下的內(nèi)容建立在這條一般原則之上:仔細地使用?find?命令可以讓 UNIX 文件系統(tǒng)的管理工作變得更加容易。例如,如果您使用了?-fstype?參數(shù),find?命令可以根據(jù)查找到的文件所處的文件系統(tǒng)的類型來對命令進行相應的處理。在?find命令對查找到的文件執(zhí)行相應命令前將對您進行提示,這通常是非常有用的,您可以使用?-ok?參數(shù)告訴它繼續(xù)執(zhí)行該操作,接下來我們將對其進行介紹。
可選的執(zhí)行
-ok是 -exec 參數(shù)的一個重要的替代項,它的行為和?-exec一樣,但它會提示您是否要對文件運行相應的命令。假設您想要刪除 home 目錄中的大部分 .txt 文件,但希望能夠逐個文件地執(zhí)行該操作。像 UNIX 中的?rm命令那樣的刪除操作是很危險的,因為當使用像find這樣的自動化處理方式來查找文件時,它可能一不小心會刪除重要的文件,您也許希望在刪除這些系統(tǒng)查找到的文件之前對其進行仔細檢查。
下面的命令列出了您的 home 目錄中所有的 .txt 文件。要刪除這些文件,必須在?find?命令通過列出文件名提示您確認操作時輸入?Y?或者?y:
?
$ find $HOME/. -name *.txt -ok rm {} \;
? ?
?
它列出了查找到的每個文件,并且系統(tǒng)將暫停以等待您輸入?Y或者?y.?如果您按下?Enter?鍵,系統(tǒng)將不會刪除該文件
2014-12-01
1.命令格式:
find pathname -options [-print -exec -ok ...]
2.命令功能:
用于在文件樹種查找文件,并作出相應的處理
3.命令參數(shù):
pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。?
-print: find命令將匹配的文件輸出到標準輸出。?
-exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為'command' {? } \;,注意{?? }和\;之間的空格。?
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
4.命令選項:
-name?? 按照文件名查找文件。
-perm?? 按照文件權(quán)限來查找文件。
-prune? 使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。
-user?? 按照文件屬主來查找文件。
-group? 按照文件所屬的組來查找文件。
-mtime -n +n? 按照文件的更改時間來查找文件, - n表示文件更改時間距現(xiàn)在n天以內(nèi),+ n表示文件更改時間距現(xià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時表示文件長度以字節(jié)計。-depth:在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。
-fstype:查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通??梢栽谂渲梦募?etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。
-mount:在查找文件時不跨越文件系統(tǒng)mount點。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。
另外,下面三個的區(qū)別:
-amin n?? 查找系統(tǒng)中最后N分鐘訪問的文件
-atime n? 查找系統(tǒng)中最后n*24小時訪問的文件
-cmin n?? 查找系統(tǒng)中最后N分鐘被改變文件狀態(tài)的文件
-ctime n? 查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件
-mmin n?? 查找系統(tǒng)中最后N分鐘被改變文件數(shù)據(jù)的文件
-mtime n? 查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件
2014-12-01
find命令是一個在UNIX文件系統(tǒng)中查找文件的常用命令,可以進行很多條件查找。
語法: find 路徑 約束條件
如何查找在文件名中含有指定關(guān)鍵字的文件?
下面這條命令查找在“/etc”目錄下所有文件名中含有“mail”的文件。?
# find /etc -name "*mail*"??
如何查找文件大小超過指定值的文件?
下面這個命令會列出系統(tǒng)中所有大于100M的文件
# find / -type f -size +100M
如何查找在最近幾天沒有被修改過的文件?
下面這條命令會列出在當前目錄下在最近60天沒有被修改過文件
# find . -mtime +60
如何查找在最近幾天被修改的文件?
下面這條命令會列出在當前目錄下在最近2天被修改過文件
# find . –mtime -2
如何刪除擴展名為.tar.gz并且大于100M的壓縮文件?
當你不想意外刪除文件時,那么當執(zhí)行下列命令要小心點。
最好的方法是利用“l(fā)s -l”去執(zhí)行下列相同命令以確保當執(zhí)行rm命令時,你知道什么文件會被刪除。
# find / -type f -name *.tar.gz -size +100M -exec ls -l {} \;?
# find / -type f -name *.tar.gz -size +100M -exec rm -f {} \;
如何對最近幾天沒有被修改的文件進行存檔?
下面的命令查找到在“/home/jsmith”目錄下最近60天沒有被修改的文件并且在“/tmp”下創(chuàng)建一個格式為“ddmmyyyy_archive.tar”的歸檔文件
# find /home/jsmith -type f -mtime +60 | xargs tar -cvf /tmp/`date '+%d%m%Y'_archive.tar`
2014-12-01
查找指定時間內(nèi)修改過的文件
命令:
?????????? find -atime -2
?
根據(jù)關(guān)鍵字查找
命令:
find . -name "*.log"
?
按照目錄或文件的權(quán)限來查找文件
命令:
find /opt/soft/test/ -perm 777
?
按類型查找
命令:
find . -type f -name "*.log"
?
查找當前所有目錄并排序
命令:
find . -type d | sort
?
按大小查找文件
命令:
find . -size +1000c -print
2014-12-01
find 功能強大,但速度慢
要進行模糊查詢就要使用以下的通配符:
* 匹配任意內(nèi)容
? 匹配任意一個字符
[] 匹配任意一個中括號內(nèi)的字符
下面是網(wǎng)上查詢的知識:
-name?? filename???????????? #查找名為filename的文件
-perm??????????????????????? #按執(zhí)行權(quán)限來查找
-user??? username???????????? #按文件屬主來查找
-group groupname??????????? #按組來查找
-mtime?? -n +n??????????????? #按文件更改時間來查找文件,-n指n天以內(nèi),+n指n天以前
-atime??? -n +n?????????????? #按文件訪問時間來查GIN: 0px">
-ctime??? -n +n????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前
-nogroup???????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser???????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer?? f1 !f2????????????? 找文件,-n指n天以內(nèi),+n指n天以前?
-ctime??? -n +n?????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前?
-nogroup???????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer?? f1 !f2?????????????? #查更改時間比f1新但比f2舊的文件
-type??? b/d/c/p/l/f???????? #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件
-size????? n[c]?????????????? #查長度為n塊[或n字節(jié)]的文件
-depth?????????????????????? #使查找在進入子目錄前先行查找完本目錄
-fstype???????????????????? #查更改時間比f1新但比f2舊的文件
-type??? b/d/c/p/l/f???????? #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件
-size????? n[c]?????????????? #查長度為n塊[或n字節(jié)]的文件
-depth?????????????????????? #使查找在進入子目錄前先行查找完本目錄
-fstype????????????????????? #查位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通???在/etc/fstab中找到
-mount?????????????????????? #查文件時不跨越文件系統(tǒng)mount點
-follow????????????????????? #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件
-cpio??????????????? %;????? #查位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通???在/etc/fstab中找到
-mount?????????????????????? #查文件時不跨越文件系統(tǒng)mount點
-follow????????????????????? #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件
-cpio??????????????????????? #對匹配的文件使用cpio命令,將他們備份到磁帶設備中
-prune?????????????????????? #忽略某個目錄
2014-12-01
Linux中find常見用法示例
·find ?? path??? -option??? [??? -print ]??? [ -exec??? -ok??? command ]??? {} \;
#-print 將查找到的文件輸出到標準輸出
#-exec??? command??? {} \;?????? -----將查到的文件執(zhí)行command操作,{} 和 \;之間有空格
#-ok 和-exec相同,只不過在操作前要詢用戶 ==================================================== -name??? filename?????????????? #查找名為filename的文件
-perm???????????????????????? #按執(zhí)行權(quán)限來查找
-user???? username????????????? #按文件屬主來查找
-group groupname????????????? #按組來查找
-mtime??? -n +n???????????????? #按文件更改時間來查找文件,-n指n天以內(nèi),+n指n天以前
-atime???? -n +n??????????????? #按文件訪問時間來查GIN: 0px">-perm????????????????????????? #按執(zhí)行權(quán)限來查找
-user???? username????????????? #按文件屬主來查找
-group groupname????????????? #按組來查找
-mtime??? -n +n???????????????? #按文件更改時間來查找文件,-n指n天以內(nèi),+n指n天以前
-atime???? -n +n??????????????? #按文件訪問時間來查找文件,-n指n天以內(nèi),+n指n天以前
-ctime???? -n +n??????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前
-nogroup????????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser?????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer??? f1 !f2??????????????? 找文件,-n指n天以內(nèi),+n指n天以前
-ctime???? -n +n??????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內(nèi),+n指n天以前
-nogroup????????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
-nouser?????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
-newer??? f1 !f2??????????????? #查更改時間比f1新但比f2舊的文件
-type????? b/d/c/p/l/f????????? #查是塊設備、目錄、字符設備、管道、符號鏈接、普通文件
-size?????? n[c]??????????????? #查長度為n塊[或n字節(jié)]的文件
-depth??????????????????????? #使查找在進入子目錄前先行查找完本目錄
-fstype?????????????????????? #查更改時間比f1新但比f2舊的文件
-mount??????????????????????? #查文件時不跨越文件系統(tǒng)mount點
-follow?????????????????????? #如果遇到符號鏈接文件,就跟蹤鏈接所指的文件
-cpio???????????????????????? #對匹配的文件使用cpio命令,將他們備份到磁帶設備中
-prune??????????????????????? #忽略某個目錄 ====================================================
$find??? ~??? -name??? "*.txt"??? -print????? #在$HOME中查.txt文件并顯示
$find??? .???? -name??? "*.txt"??? -print
$find??? .???? -name??? "[A-Z]*"??? -pri26nbsp;???? #對匹配的文件使用cpio命令,將他們備份到磁帶設備中
-prune??????????????????????????????? #忽略某個目錄 $find??? .???? -name??? "[A-Z]*"??? -print??? #查以大寫字母開頭的文件
$find??? /etc??? -name??? "host*"??? -print #查以host開頭的文件
$find??? .??? -name??? "[a-z][a-z][0--9][0--9].txt"???? -print??? #查以兩個小寫字母和兩個數(shù)字開頭的txt文件
$find .??? -perm??? 755??? -print
$find??? .??? -perm -007??? -exec ls -l {} \;??? #查所有用戶都可讀寫執(zhí)行的文件同-perm 777
$find??? . -type d??? -print?? 打印目錄結(jié)構(gòu)
$find??? .?? !??? -type??? d??? -print??打印非目錄文件 find /usr/include -name '*.h' -exec grep AF_INEF6 {} \; 因grep無法遞歸搜索子目錄,故可以和find相結(jié)合使用。 在/usr/include 所有子目錄中的.h文件中找字串AF_INEF6
$find??? .??? -type l??? -print $find??? .??? -size??? +1000000c??? -print???????? #查長度大于1Mb的文件
$find??? .??? -size??? 100c????????? -print??????? # 查長度為100c的文件
$find??? .??? -size??? +10??? -print?????????????? #查長度超過期作廢10塊的文件(1塊=512字節(jié)) $cd /
$find??? etc??? home??? apps???? -depth??? -print??? | cpio??? -ivcdC65536??? -o??? /dev/rmt0
$find??? /etc -name "passwd*"??? -exec grep??? "cnscn"??? {}??? \;??? #看是否存在cnscn用戶
$find . -name "yao*"??? | xargs file
$find??? . -name "yao*"??? |??? xargs??? echo???? "" > /tmp/core.log
$find??? . -name "yao*"??? | xargs??? chmod??? o-w ====================================================== find??? -name april*??????????????????????? 在當前目錄下查找以april開始的文件
find??? -name??? april*??? fprint file????????? 在當前目錄下查找以april開始的文件,并把結(jié)果輸出到file中
find??? -name ap* -o -name may*??? 查找以ap或may開頭的文件
find??? /mnt??? -name tom.txt??? -ftype vfat??? 在/mnt下查找名稱為tom.txt且文件系統(tǒng)類型為vfat的文件
find??? /mnt??? -name t.txt ! -ftype vfat???? 在/mnt下查找名稱為tom.txt且文件系統(tǒng)類型不為vfat的文件
find??? /tmp??? -name wa* -type l???????????? 在/tmp下查找名為wa開頭且類型為符號鏈接的文件
find??? /home??? -mtime??? -2?????????????????? 在/home下查最近兩天內(nèi)改動過的文件
find /home???? -atime -1??????????????????? 查1天之內(nèi)被存取過的文件
find /home -mmin???? +60??????????????????? 在/home下查60分鐘前改動過的文件
find /home??? -amin??? +30??????????????????? 查最近30分鐘前被存取過的文件
find /home??? -newer??? tmp.txt?????????????? 在/home下查更新時間比tmp.txt近的文件或目錄
find /home??? -anewer??? tmp.txt????????????? 在/home下查存取時間比tmp.txt近的文件或目錄
find??? /home??? -used??? -2??????????????????? 列出文件或目錄被改動過之后,在2日內(nèi)被存取過的文件或目錄
find??? /home??? -user cnscn????????????????? 列出/home目錄內(nèi)屬于用戶cnscn的文件或目錄
find??? /home??? -uid??? +501?????????????????? 列出/home目錄內(nèi)用戶的識別碼大于501的文件或目錄
find??? /home??? -group??? cnscn??????????????? 列出/home內(nèi)組為cnscn的文件或目錄
find??? /home??? -gid 501???????????????????? 列出/home內(nèi)組id為501的文件或目錄
find??? /home??? -nouser????????????????????? 列出/home內(nèi)不屬于本地用戶的文件或目錄
find??? /home??? -nogroup???????????????????? 列出/home內(nèi)不屬于本地組的文件或目錄
find??? /home???? -name tmp.txt???? -maxdepth??? 4??? 列出/home內(nèi)的tmp.txt 查時深度最多為3層
find??? /home??? -name tmp.txt??? -mindepth??? 3??? 從第2層開始查
find??? /home??? -empty?????????????????????? 查找大小為0的文件或空目錄
find??? /home??? -size??? +512k???????????????? 查大于512k的文件
find??? /home??? -size??? -512k???????????????? 查小于512k的文件
find??? /home??? -links??? +2?????????????????? 查硬連接數(shù)大于2的文件或目錄
find??? /home??? -perm??? 0700????????????????? 查權(quán)限為700的文件或目錄
find??? /tmp??? -name tmp.txt??? -exec cat {} \;
find??? /tmp??? -name??? tmp.txt??? -ok??? rm {} \; find???? /??? -amin???? -10???????? # 查找在系統(tǒng)中最后10分鐘訪問的文件
find???? /??? -atime??? -2?????????? # 查找在系統(tǒng)中最后48小時訪問的文件
find???? /??? -empty??????????????? # 查找在系統(tǒng)中為空的文件或者文件夾
find???? /??? -group??? cat????????? # 查找在系統(tǒng)中屬于 groupcat的文件
find???? /??? -mmin??? -5?????????? # 查找在系統(tǒng)中最后5分鐘里修改過的文件
find???? /??? -mtime??? -1????????? #查找在系統(tǒng)中最后24小時里修改過的文件
find???? /??? -nouser?????????????? #查找在系統(tǒng)中屬于作廢用戶的文件
find???? /??? -user???? fred???????? #查找在系統(tǒng)中屬于FRED這個用戶的文件
2014-12-01
1、find命令的一般形式為;
find pathname -options [-print -exec -ok ...]
2、find命令的參數(shù);
pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。
-print: find命令將匹配的文件輸出到標準輸出。
-exec: find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為'command' { } ;,注意{ }和;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
3、find命令選項
-name
按照文件名查找文件。
-perm
按照文件權(quán)限來查找文件。
-prune
使用這一選項可以使find命令不在當前指定的目錄中查找,如果同時使用-depth選項,那么-prune將被find命令忽略。
-user
按照文件屬主來查找文件。
-group
按照文件所屬的組來查找文件。
-mtime -n +n
按照文件的更改時間來查找文件, - n表示文件更改時間距現(xiàn)在n天以內(nèi),+ n表示文件更改時間距現(xià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時表示文件長度以字節(jié)計。-depth:在查找文件時,首先查找當前目錄中的文件,然后再在其子目錄中查找。
-fstype:查找位于某一類型文件系統(tǒng)中的文件,這些文件系統(tǒng)類型通??梢栽谂渲梦募?etc/fstab中找到,該配置文件中包含了本系統(tǒng)中有關(guān)文件系統(tǒng)的信息。
-mount:在查找文件時不跨越文件系統(tǒng)mount點。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。
另外,下面三個的區(qū)別:
-amin n
查找系統(tǒng)中最后N分鐘訪問的文件
-atime n
查找系統(tǒng)中最后n*24小時訪問的文件
-cmin n
查找系統(tǒng)中最后N分鐘被改變文件狀態(tài)的文件
-ctime n
查找系統(tǒng)中最后n*24小時被改變文件狀態(tài)的文件
-mmin n
查找系統(tǒng)中最后N分鐘被改變文件數(shù)據(jù)的文件
-mtime n
查找系統(tǒng)中最后n*24小時被改變文件數(shù)據(jù)的文件
4、使用exec或ok來執(zhí)行shell命令
使用find命令時,只要把想要的操作寫在一個文件里,就可以用exec來配合find命令查找,很方便的
在有些操作系統(tǒng)中只允許-exec選項執(zhí)行諸如l s或ls -l這樣的命令。大多數(shù)用戶使用這一選項是為了查找舊文件并刪除它們。建議在真正執(zhí)行rm命令刪除文件之前,最好先用ls命令看一下,確認它們是所要刪除的文件。
exec選項后面跟隨著所要執(zhí)行的命令或腳本,然后是一對兒{ },一個空格和一個,最后是一個分號。為了使用exec選項,必須要同時使用print選項。如果驗證一下find命令,會發(fā)現(xiàn)該命令只輸出從當前路徑起的相對路徑及文件名。
例如:為了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec選項中
# find . -type f -exec ls -l { } ;
-rw-r--r-- 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r--r-- 1 root root 12959 2003-02-25 ./conf/magic
-rw-r--r-- 1 root root 180 2003-02-25 ./conf.d/README
上面的例子中,find命令匹配到了當前目錄下的所有普通文件,并在-exec選項中使用ls -l命令將它們列出。
在/logs目錄中查找更改時間在5日以前的文件并刪除它們:
$ find logs -type f -mtime +5 -exec rm { } ;
記?。涸趕hell中用任何方式刪除文件之前,應當先查看相應的文件,一定要小心!當使用諸如mv或rm命令時,可以使用-exec選項的安全模式。它將在對每個匹配到的文件進行操作之前提示你。
在下面的例子中, find命令在當前目錄中查找所有文件名以.LOG結(jié)尾、更改時間在5日以上的文件,并刪除它們,只不過在刪除之前先給出提示。
$ find . -name "*.conf" -mtime +5 -ok rm { } ;
< rm ... ./conf/httpd.conf > ? n
按y鍵刪除文件,按n鍵不刪除。
任何形式的命令都可以在-exec選項中使用。
在下面的例子中我們使用grep命令。find命令首先匹配所有文件名為“ passwd*”的文件,例如passwd、passwd.old、passwd.bak,然后執(zhí)行g(shù)rep命令看看在這些文件中是否存在一個sam用戶。
# find /etc -name "passwd*" -exec grep "sam" { } ;
sam:x:501:501::/usr/sam:/bin/bash
find命令的例子;
1、查找當前用戶主目錄下的所有文件:
下面兩種方法都可以使用
$ find $HOME -print
$ find ~ -print
2、讓當前目錄中文件屬主具有讀、寫權(quán)限,并且文件所屬組的用戶和其他用戶具有讀權(quán)限的文件;
$ find . -type f -perm 644 -exec ls -l { } ;
3、為了查找系統(tǒng)中所有文件長度為0的普通文件,并列出它們的完整路徑;
$ find / -type f -size 0 -exec ls -l { } ;
4、查找/var/logs目錄中更改時間在7日以前的普通文件,并在刪除之前詢問它們;
$ find /var/logs -type f -mtime +7 -ok rm { } ;
5、為了查找系統(tǒng)中所有屬于root組的文件;
$find . -group root -exec ls -l { } ;
-rw-r--r-- 1 root root 595 10月 31 01:09 ./fie1
6、find命令將刪除當目錄中訪問時間在7日以來、含有數(shù)字后綴的admin.log文件。
該命令只檢查三位數(shù)字,所以相應文件的后綴不要超過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、為了查找當前文件系統(tǒng)中的所有目錄并排序;
$ find . -type d | sort
8、為了查找系統(tǒng)中所有的rmt磁帶設備;
$ find /dev/rmt -print
xargs
xargs - build and execute command lines from standard input
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執(zhí)行。但有些系統(tǒng)對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之后,就會出現(xiàn)溢出錯誤。錯誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。
find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。
在有些系統(tǒng)中,使用-exec選項會為處理每一個匹配到的文件而發(fā)起一個相應的進程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行;這樣在有些情況下就會出現(xiàn)進程過多,系統(tǒng)性能下降的問題,因而效率不高;
而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會根據(jù)該命令的選項及系統(tǒng)內(nèi)核中相應的可調(diào)參數(shù)來確定。
來看看xargs命令是如何同find命令一起使用的,并給出一些例子。
下面的例子查找系統(tǒng)中的每一個普通文件,然后使用xargs命令來測試它們分別屬于哪類文件
#find . -type f -print | xargs file
./.kde/Autostart/Autorun.desktop: UTF-8 Unicode English text
./.kde/Autostart/.directory: ISO-8859 text
......
在整個系統(tǒng)中查找內(nèi)存信息轉(zhuǎn)儲文件(core dump) ,然后把結(jié)果保存到/tmp/core.log 文件中:
$ find / -name "core" -print | xargs echo "" >/tmp/core.log
上面這個執(zhí)行太慢,我改成在當前目錄下查找
#find . -name "file*" -print | xargs echo "" > /temp/core.log
# cat /temp/core.log
./file6
在當前目錄下查找所有用戶具有讀、寫和執(zhí)行權(quán)限的文件,并收回相應的寫權(quán)限:
# ls -l
drwxrwxrwx 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxrwx 2 sam adm 0 10月 31 01:01 httpd.conf
# find . -perm -7 -print | xargs chmod o-w
# ls -l
drwxrwxr-x 2 sam adm 4096 10月 30 20:14 file6
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 http3.conf
-rwxrwxr-x 2 sam adm 0 10月 31 01:01 httpd.conf
用grep命令在所有的普通文件中搜索hostname這個詞:
# find . -type f -print | xargs grep "hostname"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
用grep命令在當前目錄下的所有普通文件中搜索hostnames這個詞:
# find . -name * -type f -print | xargs grep "hostnames"
./httpd1.conf:# different IP addresses or hostnames and have them handled by the
./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
on your
注意,在上面的例子中, 用來取消find命令中的*在shell中的特殊含義。
find命令配合使用exec和xargs可以使用戶對所匹配到的文件執(zhí)行幾乎所有的命令。
2014-12-01
find命令的一般形式為: ??
find pathname -options [-print -exec -ok ...]
參數(shù)說明:
pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統(tǒng)根目錄。
-print: ? find命令將匹配的文件輸出到標準輸出。
-exec: ? ?find命令對匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應命令的形式為"command { } \; ",注意"{ }"和“\;”之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執(zhí)行該參數(shù)所給出的shell命令,在執(zhí)行每一個命令之前,都會給出提示,讓用戶來確定是否執(zhí)行。
2014-12-01
$find?? ~?? -name?? "*.txt"?? -print??? #在$HOME中查.txt文件并顯示
$find?? .??? -name?? "*.txt"?? -print
$find?? .??? -name?? "[A-Z]*"?? -print?? #查以大寫字母開頭的文件
$find?? /etc?? -name?? "host*"?? -print #查以host開頭的文件
$find?? .?? -name?? "[a-z][a-z][0–9][0–9].txt"??? -print?? #查以兩個小寫字母和兩個數(shù)字開頭的txt文件
$find .?? -perm?? 755?? -print
$find?? .?? -perm -007?? -exec ls -l {} \;?? #查所有用戶都可讀寫執(zhí)行的文件同-perm 777
$find?? . -type d?? -print
$find?? .?? !?? -type?? d?? -print?
$find?? .?? -type l?? -print
$find?? .?? -size?? +1000000c?? -print??????? #查長度大于1Mb的文件
$find?? .?? -size?? 100c???????? -print?????? # 查長度為100c的文件
$find?? .?? -size?? +10?? -print????????????? #查長度超過期作廢10塊的文件(1塊=512字節(jié))
$find?? etc?? home?? apps??? -depth?? -print?? | cpio?? -ivcdC65536?? -o?? /dev/rmt0
$find?? /etc -name "passwd*"?? -exec grep?? "cnscn"?? {}?? \;?? #看是否存在cnscn用戶
$find . -name "yao*"?? | xargs file
$find?? . -name "yao*"?? |?? xargs?? echo??? "" > /tmp/core.log
$find?? . -name "yao*"?? | xargs?? chmod?? o-w