天天看點

Find指令

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>{} &gt;&gt; </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>{} &gt;&gt; </code><code>/tmp/largefiles</code>

本文轉自 ftmoonfans  51CTO部落格,原文連結:http://blog.51cto.com/soulboy/1258996