歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux/Unix find命令詳解

Linux/Unix find命令詳解

日期:2017/2/28 15:30:15   编辑:Linux教程

1.1 命令選項
-name :照文件名查找文件。
-perm:照文件權限來查找文件。
-user:照文件屬主來查找文件。
-group:照文件所屬的組來查找文件。
-mtime -n +n:照文件的更改時間來查找文件, - n表示文件更改時間距現在n天以內,+ 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時表示文件長度以字節計。
-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
-fstype:查找位於某一類型文件系統中的文件,這些文件系統類型通常可以在配置文件/etc/fstab中找到,該配置文件中包含了本系統中有關文件系統的信息。
-mount:在查找文件時不跨越文件系統mount點。
-follow:如果find命令遇到符號鏈接文件,就跟蹤至鏈接所指向的文件。
-cpio:對匹配的文件使用cpio命令,將這些文件備份到磁帶設備中。


另外,下面三個的區別:
-amin n:系統中最後N分鐘訪問的文件
-atime n:系統中最後n*24小時訪問的文件
-cmin n: 查找系統中最後N分鐘被改變文件狀態的文件
-ctime n: 查找系統中最後n*24小時被改變文件狀態的文件
-mmin n: 查找系統中最後N分鐘被改變文件數據的文件
-mtime n: 查找系統中最後n*24小時被改變文件數據的文件


1.2 結合其他命令
-print: find命令將匹配的文件輸出到標准輸出。
-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格。
例如:
a. 列出當前目錄下所有文件:
bash-2.03$ find . -type f -exec ls -l {} \;
-rwxr-xr-x 1 ismg282 aisoft 5026 1月 9 15:40 ./wangzl/aimgtrace.ismg
-rwxr-xr-x 1 ismg282 aisoft 1310 1月 10 16:07 ./wangzl/smsICP.sh
-rw-r--r-- 1 ismg282 aisoft 15 5月 31 16:14 ./aa.txt
-rw-r--r-- 1 ismg282 aisoft 15 5月 31 16:15 ./bb.txt
-rw-r--r-- 1 ismg282 aisoft 15 5月 31 16:15 ./bak/aa.txt


b. 刪除滿足要求的目錄下的所有文件:
find . -type d -name "LogBak" -exec rm -rf {}/* \;
find . -type d -name "BillBak" -exec rm -rf {}/* \;
find . -type d -name "BillTmpBak" -exec rm -rf {}/* \;
find . -type d -name "Data" -exec rm -fr {}/* \;
find . -type d -name "Trap" -exec rm -fr {}/* \;

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

Xargs:但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。例子:用grep命令在當前目錄下的所有普通文件中搜索hostnames這個詞:
bash-2.03$ find . -name \* -type f -print | xargs grep "test"
./aa.txt:test
./bb.txt:test
./bak/aa.txt:test


3) find
find命令是功能最強的命令之一,但同時也是命令行結構最難以掌握的命令之一。
# find / -print | wc -l 顯示系統中所有文件和目錄的數目。
# find / -user $LOGNAME -print 顯示系統中該用戶所有文件和目錄。
# find / -size 100 -print 顯示文件大小為100 blocks。
# find / -size -100 -print 顯示文件大小小於100 blocks 。
# find / -size +100 -print 顯示文件大小大於100 blocks 。
# find / -name core -exec rm {} ;查找並刪除core文件。
# find . -exec chown $LOGNAME {} ; 修改一個目錄下的所有文件的用戶所屬。
# find .-type d -exec chmod 770 {} ;修改一個目錄下的所有目錄的權限。
# find . -ctime +3 -exec ls -l {} \; 查找當前目錄下3天前創建的文件並列出(ctime 創建,atime 訪問,mtime 修改)
find /home/m_collect_b_hdc/top/ -ctime +3 -exec rm {} \;

Copyright © Linux教程網 All Rights Reserved