find命令:用於在文件樹中查找文件,並作出相應的處理 1、find命令的格式; find pathname -options [-print -exec -ok ...] {}\ 2、find命令的參數; pathname: find命令所查找的目錄路徑。例如用“.”來表示當前目錄,用“/”來表示 ...
find命令:用於在文件樹中查找文件,並作出相應的處理
1、find命令的格式;
find pathname -options [-print -exec -ok ...] {}\
2、find命令的參數;
pathname: find命令所查找的目錄路徑。例如用“.”來表示當前目錄,用“/”來表示系統根目錄。
-print: find命令將匹配的文件輸出到標準輸出。
-exec: find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command' { } ;,註意{ }和\;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
3、find命令的選項:
-depth:在查找文件時,首先查找當前目錄中的文件,然後再在其子目錄中查找。
-name:按照文件名查找
-perm:按照文件許可權來查找
-prune:可用使find命令不在當前制定的目錄中查找,如果同時使用-depth選項,那麼-prune將被find忽略
-user:按照文件屬主查找
-group:按照文件屬組查找
-nouser:查找無有效屬主的文件
-nogroup:查找無有效屬組的文件
-newer file1 file2:查找更改時間比file1新,但是比file2舊的文件
-type:查找某一類型的文件,諸如:f-普通文件、d-目錄、c-字元文件、b-塊設備、p-管道文件、l-符號連接
-size:[c] 查找文件長度為n塊的文件,帶有c時表示文件長度以位元組計
-fstype:查找屬於某一類型文件系統的文件
-mount:查找文件時不跨越文件系統mount點
-follow:如果find命令遇到符號連接文件,就跟蹤至連接所指向的文件
-cpio:對匹配的文件使用cpio命令,將文件備份到磁帶設備中
-mtime -n +n:按照文件的修改時間來查找,-n文件更改時間距現在n天以內,+n文件更改時間距現在n天以前
-amin n:查找系統中最後n分鐘訪問的文件
-atime n:查找系統中最後n*24小時訪問的文件
-cmin n:查找系統中最後n分鐘被改變文件狀態的文件
-ctime n:查找系統中最後n*24分鐘被改變文件狀態的文件
-mmin n:查找系統中最後n分鐘被改變文件數據的文件
-mtime n:查找系統中最後n*24小時被改變文件數據的文件
4、使用示例:
1)查找指定時間內修改過的文件:(查找48小時內修改過的文件)
[root@bogon ~]# find -atime -2 . ./.bash_profile
2)根據關鍵字查找:(查找當前目錄以.log結尾的文件)
[root@bogon log]# find . -name "*.log" ./audit/audit.log ./tuned/tuned.log
3)根據文件許可權查找:(查找/tmp目錄下許可權為755的文件)
[root@bogon ~]# find /tmp -perm 755
4)根據文件類型查找:
[root@bogon ~]# find . -type d -print ##查找當前目錄下的目錄 . ./data [root@bogon ~]# find . ! -type d -print ##查找當前目錄下的非目錄 ./.bash_logout ./.bash_profile
5)根據文件大小查找:(查找當前目錄下大於1k的文件)
[root@bogon ~]# find -size +1000c -print . ./anaconda-ks.cfg ./.bash_history
6)根據文件名查找
[root@bogon ~]# find . -name "*.txt" ./test.txt
5、使用exec或ok來執行shell命令:
只要把想要的操作寫在一個文件里,就可以用exec來配合find命令查找
1)顯示當前目錄下麵所有大於10k的文件,exec後面執行了一個命令,{}代表文件名
[root@bogon ~]# find . -type f -size +10k -exec ls -l {} \;
-rw-r--r--. 1 root root 12288 May 4 17:22 ./.test.txt.swp
-rw-------. 1 root root 40960 May 4 17:25 ./.swp
2)查找/tmp下10天前的文件,刪除
[root@bogon ~]# find /tmp -type f -mtime +10 -ok rm {} \;
3)備份配置文件,添加.bak擴展名
[root@bogon ~]# find . -name "*.conf" -exec cp {} {}.bak \; -rw-r--r--. 1 root root 11753 May 6 18:03 httpd.conf -rw-r--r--. 1 root root 11753 May 6 18:04 httpd.conf.bak
4)查找主目錄下被其他用戶寫入的文件
[root@bogon ~]# find ~ -perm -002 -exec chmod o-w {} \;
6、-print 匹配條件:
簡寫表達式按順序求值, -a 和 -o 都是短路求值。
1)忽略某個目錄(在httpd目錄下查找文件但不希望在/httpd/conf目錄下查找)
[root@bogon etc]# find httpd -path "httpd/conf" -prune -o -print
httpd
httpd/conf.d
httpd/conf.d/README
httpd/conf.d/autoindex.conf
2)匹配多個條件,採用OR條件操作
[root@bogon ~]# find . \( -name "*.txt" -o -name "*.conf" \) -print ./httpd.conf ./test.txt
7、xargs命令:
有些命令不能接受過多參數,此時命令執行可能會失敗,錯誤信息通常是“參數列太長”或“參數列溢出”,這就是xargs命令的用處所在
find | xargs COMMAND
示例:在當前目錄下所以普通文件中過濾“nologin”這個詞
[root@bogon ~]# find . -type f -print |xargs grep "nologin" Binary file ./.test.txt.swp matches ./test.txt:x:1:1:bin:/bin:/sbin/nologin ./test.txt:on:x:2:2:daemon:/sbin:/sbin/nologin
8、locate命令:
查詢系統上預建的文件索引資料庫,依賴於先構建索引,構建過程需要遍歷整個根文件系統,極消耗資源。
工作特點:查找速度快,模糊查找,非實時查找。
-i 執行區分大小寫的搜索
-n x 只列舉前x個匹配選項