find:實時、精确、支援衆多查找标準、周遊制定目錄中的所有檔案完成查找
find 查找路徑 查找标準 查找到以後的處理動作
查找路徑 預設為目前目錄
查找标準 預設為路徑下的所有檔案(子目錄中的内容也顯示)
處理動作 預設為顯示出來列印
比對标準
-name 'filename' 對檔案名做精确比對
檔案名通配 find /tmp/ -name "*.sh" -exec chmod o-x {} \;
* 任意長度任意字元 開頭 'passwd*'
?
[]
find /tmp/ -name "hah[a-z].sh"
-iname 'filename' 對檔案名做精确比對
-regex PATTERN 基于正規表達式進行檔案名比對
-user USERNAME 基于使用者名進行查找
-group Group 基于屬組名查找
-uid num 基于UID查找,主要用于使用者被删除以後,以前使用者的檔案會變為UID
-nouser 查找沒有屬主的檔案
-type fdcblps 根據檔案類型查找
-size [+|-]#k find /etc -size +2k -ls
#M
#G
組合條件
-a 與 find /tmp -nouser -a -type d -ls 沒有屬主内容是目錄的
-o 或 find /tmp -nouser -o -type d -ls
-not 非 find /tmp -not -type d 查找非目錄的檔案
find /tmp -not -type dc 查找非目錄非套接字檔案
find /home -not -user usr1 -a -not -user usr2 不是usr1和usr2的檔案
find /home -not \( -user usr1 -o -user usr2 \)
find /home -not -user usr1 -o -not -type d 屬主不是usr1或者類型不是目錄,
(顯示既是目錄,屬主又是usr1之外的檔案)
find /home -not \( -user usr1 -a -type d \)
-mtime 通路
-ctime 改變
-atime 修改
-mmin
-cmin
-amin
[+|-]5
5 五天前那天通路過
- 五天之内曾經通路過
+ 至少五天沒有通路過(5分鐘之前通路過的)
-perm -mode 根據權限每一位精确查找,3個rwx位必須完全包含
find /tmp -perm 644 精切比對
644包含755不包含750
rwxr-xr-x rw-r--r-- rwxr-x---
find /tmp -perm -644
find /tmp -perm -001 其他使用者能執行的檔案
find /tmp -perm -007 其他使用者能讀寫執行的檔案
-perm /mode 比對其中一個就可以 任意一位比對滿足條件rwx
find /tmp -perm /061 屬組可讀可寫或其他人可執行的檔案
find /tmp -perm /644 隻要符合其中一位就可以
如果檔案權限是002,就無法比對,因為三個位置沒有一個相等的
處理動作
-print 顯示
-ls 類似ls -l形式顯示每個檔案的詳細
-ok COMMAND {} \; find /shell -user usr1 -exec chown root {} \; 提示是否執行
-exec COMMAND {} \; find /shell -user usr1 -exec chown root {} \;
| xargs find /etc/ -type f -a -size +2k -a -size -5k | xargs echo {} >> /tmp/largefiles
練習
1
2
3
4
5
6
7
8
9
10
11
12
13
<code>1、把在</code><code>/etc</code><code>目錄中類型為普通檔案大于2k小于3k的檔案複制到</code><code>/tmp/haha</code><code>目錄中</code>
<code> </code><code>find</code> <code>/etc/</code> <code>-</code><code>type</code> <code>f -a -size +2k -a -size -5k -</code><code>exec</code> <code>cp</code> <code>{} </code><code>/tmp/haha</code> <code>\;</code>
<code>2、把</code><code>/tmp</code><code>目錄下檔案類型為目錄的檔案屬組和其他人賦予執行權限</code>
<code> </code><code>find</code> <code>/tmp</code> <code>-</code><code>type</code> <code>d -</code><code>exec</code> <code>chmod</code> <code>go+x {} \;</code>
<code>3、把tmp下屬組具有寫權限的檔案後面加.new</code>
<code> </code><code>find</code> <code>/tmp</code> <code>-perm -020 -</code><code>exec</code> <code>mv</code> <code>{} {}.new \;</code>
<code>4、把</code><code>/tmp</code><code>目錄下以.sh結尾的檔案的其他人的執行權限去掉</code>
<code> </code><code>find</code> <code>/tmp/</code> <code>-name </code><code>"*.sh"</code> <code>-</code><code>exec</code> <code>chmod</code> <code>o-x {} \;</code>
<code>5、把在</code><code>/etc</code><code>目錄中類型為普通檔案大于2k小于3k的檔案名寫入</code><code>/tmp/largefiles</code><code>檔案中</code>
<code> </code><code>-</code><code>exec</code> <code>用法 每個檔案名一行</code>
<code> </code><code>find</code> <code>/etc/</code> <code>-</code><code>type</code> <code>f -a -size +2k -a -size -5k -</code><code>exec</code> <code>echo</code> <code>{} >> </code><code>/tmp/largefiles</code> <code>\;</code>
<code> </code><code>| </code><code>xargs</code> <code>用法 一行檔案, 檔案名以空格隔開</code>
<code> </code><code>find</code> <code>/etc/</code> <code>-</code><code>type</code> <code>f -a -size +2k -a -size -5k | </code><code>xargs</code> <code>echo</code> <code>{} >> </code><code>/tmp/largefiles</code>
本文轉自 ftmoonfans 51CTO部落格,原文連結:http://blog.51cto.com/soulboy/1258996