shell腳本---find詳解

  Linux下find命令在目錄結構中搜索文件,並執行指定的操作。Linux下find命令提供了相當多的查找條件,功能很強大

find常見命令參數:

<strong>命令選項:</strong>
-name   按照文件名查找文件。
-perm   按照文件權限來查找文件。
-user   按照文件屬主來查找文件。
-group  按照文件所屬的組來查找文件。
-mtime -n +n 按照文件的更改時間來查找文件 【-7 7天之內 +7 7天前】
-nogroup  查找無效屬組的文件,即該文件所屬的組在/etc/groups中不存在。
-nouser  查找無效屬主的文件,即該文件的屬主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改時間比文件file1新但比文件file2舊的文件。
-type  查找某一類型的文件,諸如:
         b - 塊設備文件。
         d - 目錄。
         c - 字符設備文件。
         p - 管道文件。
         l - 符號鏈接文件。
         f - 普通文件。
-size n:[c] 查找文件長度爲n塊的文件,帶有c表示文件長度以字節計。
-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
 
另外,下面三個的區別:
-amin n    查找系統中最後N分鐘訪問的文件
-atime n   查找系統中最後n*24小時訪問的文件
-cmin n    查找系統中最後N分鐘被改變文件狀態的文件
-ctime n   查找系統中最後n*24小時被改變文件狀態的文件
-mmin n    查找系統中最後N分鐘被改變文件數據的文件
-mtime n   查找系統中最後n*24小時被改變文件數據的文件

常用命令展示:

查找普通文件\目錄:

find /home/omd -type f  (普通文件)
find /home/omd -type d  (查詢目錄)

只顯示1級目錄文件且過濾自身:

find ./ -maxdepth 1  -type d  ! -name "hhh"

查找一天內被訪問過(access)的文件:

find /home/omd/ -atime -1 -type f

查詢inode相同的文件:

find / -inum inode數字

除了某個文件以爲,其餘的均刪除:

find /home/omd/ -type f ! -name h.txt  | xargs  rm –f  
ls | grep -v "h.txt" |xargs rm -rf (與上面類似,刪除除了某個文件外的所有文件)

刪除目錄下所有文件:

find /tmp/ -type f -exec rm -rf {} \;
find /tmp/ -type f | xargs rm -rf

查看當前路徑下所有文件的信息:

find /tmp/ -type f ! -name a |xargs rm –rf
find ./ -type f -exec file {} \;

查找指定時間內修改過的文件:

# 當前路徑下訪問文件超過2分鐘文件
find ./ -amin +2
# 當前路徑下訪問文件剛好2分鐘的文件
find ./ -amin 2
find ./ -cmin +2
find ./ -mmin +2
find ./ -mtime +2
find ./ -ctime +2
find ./ -mtime +2
find ./ -ctime +2

find / -ctime  +20  最近修改文件時間20分鐘以前
find / -mtime  +7   修改文件爲7天之前的(最重要)
find / -mtime  7    修改文件爲第7天,就是往前推7天
find / -mtime  -7   修改文件爲7天之內的

按照目錄或文件的權限來查找文件:

find /opt -perm 777

按大小查找文件:

find / -size +10M  |sort 【查找大於10M的文件】
find / -size -10M  |sort 【查找小於10M的文件】
find / -size 10M   |sort  【查找10M的文件】

在test 目錄下查找不在test4子目錄之內的所有文件:

find ./test -path "test/test4" -prune -o -print
【可以使用-prune選項來指出需要忽略的目錄。在使用-prune選項時要當心,因爲如果你同時使用了-depth選項,那麼-prune選項就會被find命令忽略】

查找比yum.log 但不比hhh.txt新的文件:

find / newer /var/log/yum.log ! -newer ./hhh.txt
 

查找更改時間在比log2012.log文件新的文件:

find ./ -newer log2012.log

在當前目錄下查找文件長度大於1 M字節的文件:

find ./ -size +1000000c –print
find ./ –size +1M -print

在/home/apache目錄下查找文件長度恰好爲100字節的文件:

find /home/apache -size 100c -print

在當前目錄下查找長度超過10塊的文件

find . -size 10 –print

其他命令:

find /home/omd/ -name *.txt | while read line; do cp $line /home/omd/h;done
for name in `chkconfig | grep 3:on |awk '{print $1}'` ; do echo $name >> h.txt; done;
find /home/omd/ -name *.txt | xargs -i cp {} /home/omd/h
cat /home/omd/h/he.txt | while read line; do echo $line >> /home/omd/h.txt ; done;
cat /home/omd/h.txt | awk 'BEGIN{print "Name "} {print $1}'
cat /home/omd/h.txt | xargs -I {} cat {}
find . -name  "*.txt" |xargs   sed -i 's/hhhh/\hHHh/g'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章