對find的功能不介紹了,以下列出一些我常用的find參數。
一、列出當前目錄以及子目錄下所有的文件和文件夾
find base_path \\base_path可以是任何目錄 -print 參數指明打印出匹配文件的文件名(路徑)。使用-print時,'\n'作爲用於分隔文件的分隔文件的定界符。
[root@wujc1 server]# find shell/ -print shell/ shell/test6 shell/test8 shell/test7 shell/test5 shell/test3 shell/test2 shell/test1 shell/test9 shell/test4 shell/test10 [root@wujc1 server]#
##-print0 指明使用'\0'作爲定界符來打印每一個匹配的文件名。
[root@wujc1 server]# find shell/ -print0 shell/shell/test6shell/test8shell/test7shell/test5shell/test3shell/test2shell/test1shell/test9shell/test4shell/test10[root@wujc1 server]# [root@wujc1 server]#
1.1、根據文件名或正則表達式匹配搜索
find base_path -name "*.txt" -print
[root@wujc1 shell]# ls example.txt EXAMPLE.txt file.txt [root@wujc1 shell]# find . -name "*.txt" ./EXAMPLE.txt ./example.txt ./file.txt [root@wujc1 shell]#
find有一個參數-iname(忽略字母大小寫),該選項作用和-name一樣,但是匹配的時候會忽略大小寫。
[root@wujc1 shell]# find . -iname "example*" -print ./EXAMPLE.txt ./example.txt [root@wujc1 shell]#
如果想匹配多個條件中的一個,可以採用OR條件操作:
[root@wujc1 shell]# find . \( -name "*.txt" -o -name "*.pdf" \) -print ./EXAMPLE.txt ./new.txt ./example.txt ./file.txt ./text.pdf [root@wujc1 shell]#
-path參數可以使用通配符來匹配文件路徑或者文件。
[root@wujc1 shell]# ll total 12 -rw-r--r--. 1 root root 0 Dec 9 01:51 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# pwd /server/shell [root@wujc1 shell]# find /server/shell -path "*list1*" -print /server/shell/file/list1 /server/shell/list/list1 [root@wujc1 shell]#
-regex選項和-path類似,不過-regex是基於正則表達式來匹配文件路徑
我們用-regex選項來匹配.py或.sh文件
[root@wujc1 shell]# ll total 12 -rw-r--r--. 1 root root 0 Dec 9 01:51 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -regex ".*\(\.py\|\.sh\)$" ./new.sh ./raw_input.py [root@wujc1 shell]#
類似的,-iregex 用於忽略正則表達式的大小寫
[root@wujc1 shell]# ll total 12 -rw-r--r--. 1 root root 0 Dec 9 01:51 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -iregex ".*\(\.py\|\.sh\)$" ./new.sh ./NEW.SH ./raw_input.py [root@wujc1 shell]#
否定參數 "!"。
匹配任何不以.txt結尾的的文件名
[root@wujc1 shell]# ll total 12 -rw-r--r--. 1 root root 0 Dec 9 01:51 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . ! -name "*.txt" -print . ./test ./test/test1 ./new.sh ./some.jpg ./file ./file/file1 ./file/list1 ./list ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]#
基於目錄深處的搜索
-maxdepth && -mindepth
限制命令遍歷的深度,-maxdepth 1 只允許在當前目錄,2即爲向下2級,其他類推
[root@wujc1 server]# ll total 4 drwxr-xr-x. 5 root root 4096 Dec 9 02:06 shell [root@wujc1 server]# pwd; /server [root@wujc1 server]# find . -maxdepth 1 -type f -print [root@wujc1 server]# find . -maxdepth 2 -type f -print ./shell/EXAMPLE.txt ./shell/new.sh ./shell/some.jpg ./shell/new.txt ./shell/example.txt ./shell/file.txt ./shell/NEW.SH ./shell/text.pdf ./shell/raw_input.py [root@wujc1 server]#
反之-mindepth爲最小遍歷多少個目錄
####提示,-maxdepth和-mindepth應該作爲find的第3個參數出現,如果作爲第4個或者之後的參數,就可能影響到find的效率,因爲它不得不進行一些不必要的檢查。
根據文件類型搜索
[root@wujc1 shell]# ll total 12 -rw-r--r--. 1 root root 0 Dec 9 01:51 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type d -print . ./test ./file ./list [root@wujc1 shell]# find . -type f ./EXAMPLE.txt ./test/test1 ./new.sh ./some.jpg ./new.txt ./example.txt ./file.txt ./file/file1 ./file/list1 ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]#
文件類型 | 類型參數 |
普通文件 | f |
符號鏈接 | l |
目錄 | d |
字符設備 | c |
塊設備 | b |
套接字 | s |
Fifo | p |
根據文件時間進行搜索
linux/unix文件系統中每一個文件都有三種時間戳,如下所示。
訪問時間(-atime):用戶最近一次訪問文件的時間。
修改時間(-mtime):文件內容最後一次被修改的時間 。
變化時間(-ctime):文件元數據最後一次改變的時間。
---打印出最近七天內被訪問過的所有文件:
[root@wujc1 shell]# find . -type f -atime -7 -print ./EXAMPLE.txt ./test/test1 ./new.sh ./some.jpg ./new.txt ./example.txt ./file.txt ./file/file1 ./file/list1 ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]# ll total 12 -rw-r--r--. 1 root root 0 Dec 9 01:51 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]#
其他類似 ####這些作爲find的時間參數而言,他們一般給出的是整數值,單位是天、這些數值通常還帶有-或+:-代表小雨,+代表大於。 (即大於多少天,小於多少天)
另外:-amin -mmin -cmin也是可以作爲find的參數,類似於-atime -mtime -ctime ,不過這些參數的單位是分鐘。
小技巧:find有一個-newer參數。使用這個參數我們可以指定一個用於比較時間戳的參考文件,例如:
找出file.txt時間更新的所有文件。
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f -newer file.txt -print ./test/test1 ./new.sh ./some.jpg ./new.txt ./example.txt ./file/file1 ./file/list1 ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]#
有興趣的可以看以下看下第8列的時間戳
基於文件大小的搜索:
打印出小於2k的文件
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# du -sh * 4.0K example.txt 0 EXAMPLE.txt 4.0K file 0 file.txt 4.0K list 0 new.sh 0 NEW.SH 0 new.txt 0 raw_input.py 0 some.jpg 4.0K test 0 text.pdf [root@wujc1 shell]# find . -type f -size -2k ./EXAMPLE.txt ./test/test1 ./new.sh ./some.jpg ./new.txt ./example.txt ./file.txt ./file/file1 ./file/list1 ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]#
以下是一些單位參考:
b | 塊 |
c | 字節 |
w | 字(2字節) |
k | 千字節 |
M | 兆字節 |
G | G字節 |
刪除匹配的文件:
-delete可以用來刪除find查找到匹配文件
刪除當前目錄下的file.txt文件:
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 0 Dec 9 01:51 file.txt drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f -name "file.txt" -delete [root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]#
基於文件所有權和文件權限的匹配
例如,列出權限是644的文件:
使用-perm參數
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-r--r--. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f -perm 644 -print ./EXAMPLE.txt ./test/test1 ./new.sh ./some.jpg ./new.txt ./example.txt ./file/file1 ./file/list1 ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]#
用!可以查找權限不是644的文件,這在查找web中php文件時很有用:
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f ! -perm 644 -print ./new.txt [root@wujc1 shell]#
查找屬於某個用戶的文件:
使用-user參數:
[root@wujc1 shell]# find . -type f -user root -print ./EXAMPLE.txt ./test/test1 ./new.sh ./some.jpg ./new.txt ./example.txt ./file/file1 ./file/list1 ./list/list1 ./NEW.SH ./text.pdf ./raw_input.py [root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]#
-exec參數
例如,找到new.txt文件以後把所有權更改爲wujc用戶:
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 root root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f -name "new.sh" -exec chown wujc {} \; [root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 wujc root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]#
-exec參數使用”{}“ 來遍歷所有被找到的文件,等同於for i in list
我們可以使用-exec參數來讀取文件的內容並寫入某個文件,統計時可以使用:
[root@wujc1 shell]# ll total 16 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 wujc root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f -name "example.txt" -exec cat {} \;> find.log [root@wujc1 shell]# ll total 20 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rw-r--r--. 1 root root 500 Dec 9 02:45 find.log drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 wujc root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]#
小技巧:-exec無法使用多個命令,但是可以執行腳本,所以我們可以把多個命令寫入到腳本中,通過-exec來執行,例如:
[root@wujc1 shell]# ll total 24 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rwxr-xr-x. 1 root root 34 Dec 9 02:48 file.sh -rw-r--r--. 1 root root 500 Dec 9 02:45 find.log drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 wujc root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test -rw-r--r--. 1 root root 0 Dec 9 01:55 text.pdf [root@wujc1 shell]# find . -type f -name "text.pdf" -exec ./file.sh {} \; [root@wujc1 shell]# ll total 24 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rwxr-xr-x. 1 root root 34 Dec 9 02:48 file.sh -rw-r--r--. 1 root root 500 Dec 9 02:45 find.log drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 wujc root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test [root@wujc1 shell]# ll /tmp/ total 0 -rw-r--r--. 1 root root 0 Dec 9 02:49 text.pdf -rw-------. 1 root root 0 Dec 2 22:04 yum.log [root@wujc1 shell]# cat file.sh #!/bin/bash \cp $1 /tmp \rm -f $1 [root@wujc1 shell]#
這裏使用方法即是-exec ./command.sh {} \
讓find跳過指定的目錄:
用find搜索的時候,爲了提升效率,略過一些不必要的被搜索的目錄。這種用法主要體現在,該目錄文件碎文件很多的情況下.
例如:
[root@wujc1 shell]# ll total 24 -rw-r--r--. 1 root root 500 Dec 9 02:22 example.txt -rw-r--r--. 1 root root 0 Dec 9 01:51 EXAMPLE.txt drwxr-xr-x. 2 root root 4096 Dec 9 02:00 file -rwxr-xr-x. 1 root root 34 Dec 9 02:48 file.sh -rw-r--r--. 1 root root 500 Dec 9 02:45 find.log drwxr-xr-x. 2 root root 4096 Dec 9 01:58 list -rw-r--r--. 1 wujc root 0 Dec 9 02:03 new.sh -rw-r--r--. 1 root root 0 Dec 9 02:06 NEW.SH -rw-------. 1 root root 0 Dec 9 01:55 new.txt -rw-r--r--. 1 root root 0 Dec 9 02:03 raw_input.py -rw-r--r--. 1 root root 0 Dec 9 01:55 some.jpg drwxr-xr-x. 2 root root 4096 Dec 9 01:59 test [root@wujc1 shell]# ll file/ list/ test/ file/: total 0 -rw-r--r--. 1 root root 0 Dec 9 01:59 file1 -rw-r--r--. 1 root root 0 Dec 9 02:00 list1 list/: total 0 -rw-r--r--. 1 root root 0 Dec 9 01:58 list1 test/: total 0 -rw-r--r--. 1 root root 0 Dec 9 01:59 test1 [root@wujc1 shell]# find /server/shell/ \( -name "list" -prune \) -o \( -type f -print \) /server/shell/EXAMPLE.txt /server/shell/test/test1 /server/shell/new.sh /server/shell/find.log /server/shell/some.jpg /server/shell/new.txt /server/shell/example.txt /server/shell/file/file1 /server/shell/file/list1 /server/shell/NEW.SH /server/shell/file.sh /server/shell/raw_input.py [root@wujc1 shell]#
這裏的方法是,第一個\( -name "list" -prune \)是排除掉要查找的目錄,第二個\( -type f -print \) 這裏是要進行的動作,這句話的意思是,打印出除了list目錄下以外的所有文件