linux find 用法详解 + 实例
一、Linux中find常見用法示例
?
·find??? path??? -option??? [??? -print ]??? [ -exec??? -ok??? command ]??? {} \;
?#-print 將查找到的文件輸出到標準輸出
?#-exec??? command??? {} \;?????? —–將查到的文件執(zhí)行command操作,{} 和 \;之間有空格
?#-ok 和-exec相同,只不過在操作前要詢用戶
?
====================================================
?
-name??? filename?????????????? #查找名為filename的文件
?-perm???????????????????????? #按執(zhí)行權限來查找
?-user???? username????????????? #按文件屬主來查找
?-group groupname????????????? #按組來查找
?-mtime??? -n +n???????????????? #按文件更改時間來查找文件,-n指n天以內,+n指n天以前
?-atime???? -n +n??????????????? #按文件訪問時間來查GIN: 0px”>-perm????????????????????????? #按執(zhí)行權限來查找
?-user???? username????????????? #按文件屬主來查找
?-group groupname????????????? #按組來查找
?-mtime??? -n +n???????????????? #按文件更改時間來查找文件,-n指n天以內,+n指n天以前
?-atime???? -n +n??????????????? #按文件訪問時間來查找文件,-n指n天以內,+n指n天以前
?-ctime???? -n +n??????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內,+n指n天以前
?-nogroup????????????????????? #查無有效屬組的文件,即文件的屬組在/etc/groups中不存在
?-nouser?????????????????????? #查無有效屬主的文件,即文件的屬主在/etc/passwd中不存
?-newer??? f1 !f2??????????????? 找文件,-n指n天以內,+n指n天以前
?-ctime???? -n +n??????????????? #按文件創(chuàng)建時間來查找文件,-n指n天以內,+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?? 打印目錄結構
?$find??? .?? !??? -type??? d??? -print? 打印非目錄文件
?
find /usr/include -name ‘*.h’ -exec grep AF_INEF6 {} \;
因grep無法遞歸搜索子目錄,故可以和find相結合使用。 在/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開始的文件,并把結果輸出到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下查最近兩天內改動過的文件
?find /home???? -atime -1??????????????????? 查1天之內被存取過的文件
?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日內被存取過的文件或目錄
?find??? /home??? -user cnscn????????????????? 列出/home目錄內屬于用戶cnscn的文件或目錄
?find??? /home??? -uid??? +501?????????????????? 列出/home目錄內用戶的識別碼大于501的文件或目錄
?find??? /home??? -group??? cnscn??????????????? 列出/home內組為cnscn的文件或目錄
?find??? /home??? -gid 501???????????????????? 列出/home內組id為501的文件或目錄
?find??? /home??? -nouser????????????????????? 列出/home內不屬于本地用戶的文件或目錄
?find??? /home??? -nogroup???????????????????? 列出/home內不屬于本地組的文件或目錄
?find??? /home???? -name tmp.txt???? -maxdepth??? 4??? 列出/home內的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????????????????? 查權限為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這個用戶的文件
?
查當前目錄下的所有普通文件
?——————————————————————————–
?
# 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
?查當前目錄下的所有普通文件,并在- e x e c選項中使用ls -l命令將它們列出
?
=================================================
?在/ l o g s目錄中查找更改時間在5日以前的文件并刪除它們:
?$ find logs -type f -mtime +5 -exec??? -ok??? rm {} \;
?
=================================================
?查詢當天修改過的文件
?[root@book class]# find??? ./??? -mtime??? -1??? -type f??? -exec??? ls -l??? {} \;
?
=================================================
?查詢文件并詢問是否要顯示
?[root@book class]# find??? ./??? -mtime??? -1??? -type f??? -ok??? ls -l??? {} \;?
?< ls … ./classDB.inc.php > ? y
?-rw-r–r–????? 1 cnscn????? cnscn???????? 13709??? 1月 12 12:22 ./classDB.inc.php
?[root@book class]# find??? ./??? -mtime??? -1??? -type f??? -ok??? ls -l??? {} \;?
?< ls … ./classDB.inc.php > ? n
?[root@book class]#
?
=================================================
?查詢并交給awk去處理
?[root@book class]# who??? |??? awk??? ‘{print $1″\t”$2}’
?cnscn???? pts/0
?
=================================================
?awk—grep—sed
?
[root@book class]# df??? -k |??? awk ‘{print $1}’ |??? grep??? -v??? ‘none’ |??? sed??? s”/\/dev\///g”
?文件系統(tǒng)
?sda2
?sda1
?[root@book class]# df??? -k |??? awk ‘{print $1}’ |??? grep??? -v??? ‘none’
?文件系統(tǒng)
?/dev/sda2
?/dev/sda1
?
1)在/tmp中查找所有的*.h,并在這些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名
?
A) find??? /tmp??? -name??? “*.h”??? | xargs??? -n50??? grep SYSCALL_VECTOR
?B) grep??? SYSCALL_VECTOR??? /tmp/*.h | cut???? -d’:'??? -f1| uniq > filename
?C) find??? /tmp??? -name “*.h”??? -exec grep “SYSCALL_VECTOR”??? {}??? \; -print
?
2)find / -name filename -exec rm -rf {} \;
????? find / -name filename -ok rm -rf {} \;
?
3)比如要查找磁盤中大于3M的文件:
?find . -size +3000k -exec ls -ld {} ;
?
4)將find出來的東西拷到另一個地方
?find *.c -exec cp ‘{}’ /tmp ‘;’
?
如果有特殊文件,可以用cpio,也可以用這樣的語法:
?find dir -name filename -print | cpio -pdv newdir
?
6)查找2004-11-30 16:36:37時更改過的文件
?# A=`find ./ -name “*php”` |??? ls -l –full-time $A 2>/dev/null | grep “2004-11-30 16:36:37
?
二、linux下find命令的用法
?
1. 基本用法:
?????? find / -name 文件名
?
???? find ver1.d ver2.d -name ‘*.c’ -print??? 查找ver1.d,ver2.d *.c文件并打印
?
???? find . -type d -print 從當前目錄查找,僅查找目錄,找到后,打印路徑名??捎糜诖蛴∧夸浗Y構。
?2. 無錯誤查找:
?????? find / -name access_log 2 >/dev/null
?3. 按尺寸查找:
?????? find / -size 1500c (查找1,500字節(jié)大小的文件,c表示字節(jié))
?????? find / -size +1500c (查找大于1,500字節(jié)大小的文件,+表示大于)???
?????? find / -size +1500c (查找小于1,500字節(jié)大小的文件,-表示小于)???
?4. 按時間:
?????? find / -amin n 最后n分鐘
?????? find / -atime n 最后n天
?????? find / -cmin n 最后n分鐘改變狀態(tài)
?????? find / -ctime n 最后n天改變狀態(tài)
?5. 其它:
?????? find / -empty 空白文件、空白文件夾、沒有子目錄的文件夾
?????? find / -false 查找系統(tǒng)中總是錯誤的文件
?????? find / -fstype type 找存在于指定文件系統(tǒng)的文件,如type為ext2
?????? find / -gid n 組id為n的文件
?????? find / -group gname 組名為gname的文件
?????? find / -depth n 在某層指定目錄中優(yōu)先查找文件內容
?????? find / -maxdepth levels 在某個層次目錄中按遞減方式查找
?6. 邏輯
?????? -and 條件與 -or 條件或
?7. 查找字符串
?????? find . -name ‘*.html’ -exec grep ‘mailto:’{}
轉載于:https://blog.51cto.com/lihuipeng/711866
總結
以上是生活随笔為你收集整理的linux find 用法详解 + 实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: inotify之文件系统事件监控使用入门
- 下一篇: linux 其他常用命令