linux find命令的用法

   對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兆字節
GG字節


刪除匹配的文件:

   -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目錄下以外的所有文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章