find、xargs命令使用及方法詳解

來源:互聯網
上載者:User

find是linux命令,它將檔案系統內符合expression的檔案列出來,你可以指要檔案的名稱、類別、時間、大小、許可權等不同命令的組合,只有完全相符的才會被列出來。
find可以在目前的目錄下甚至整個檔案系統來尋找某些檔案或目錄;

注意:find命令是相當耗資源的不得以的時候不要find的,比如說根 / 目錄;

功能說明:尋找檔案或目錄
    find-->即時尋找:速度慢、精確匹配

命令文法:
find [options] [尋找路徑] [尋找條件] [處理動作]
    尋找路徑:預設為目前的目錄
    尋找條件:預設為尋找指定路徑下的所有檔案
    處理動作:預設為顯示

下面就來一起看下find的用法吧:

1.尋找條件:根據檔案名稱尋找時是嚴格區分字母大小寫

  -name "檔案名稱": 支援使用globbing
        *  :重複0次或者任意多次前面字元
        ? :單個字元 
        [] :字元範圍
        [^]:排除字元範圍


應用執行個體:
 1).查看/etc目錄下有多少passwd檔案:
[root@xiaomazi ~]#
[root@xiaomazi ~]#  find /etc -name "passwd"
/etc/pam.d/passwd
/etc/passwd
[root@xiaomazi ~]#

 2).查看/etc目錄下所有以passwd開頭的檔案:
[root@xiaomazi ~]#  find /etc -name "passwd*"
/etc/pam.d/passwd
/etc/passwd-
/etc/passwd
[root@xiaomazi ~]#

 3).查看/etc目錄下所有以passwd結尾的檔案:
[root@xiaomazi ~]#  find /etc -name "*passwd"
/etc/pam.d/passwd
/etc/passwd
/etc/security/opasswd
[root@xiaomazi ~]#

 

2.-iname "檔案名稱":尋找時不區分字元大小寫
應用舉例:

 1).尋找/etc下所有以passwd開頭的檔案(並不區分大小寫):
[root@xiaomazi ~]# touch /etc/Passwd -->建立測試檔案
[root@xiaomazi ~]# find /etc -iname "passwd*"
/etc/pam.d/passwd
/etc/passwd-
/etc/passwd
/etc/Passwd
[root@xiaomazi ~]# rm -rf /etc/Passwd
注意不要再/etc目錄下隨便建立檔案吆.

 

3.  根據屬主屬組來尋找:

      -user UserName: 根據屬主尋找
      -group GroupName: 根據屬組尋找


應用舉例:
1).尋找檔案的屬主是Hadoop使用者的檔案:
[root@xiaomazi ~]# su - hadoop
[hadoop@xiaomazi ~]$ cp/etc/fstab/tmp/-->注意以誰的身份複製檔案,檔案的屬主屬組就是誰的.
[hadoop@xiaomazi ~]$ ls-l /tmp/
total 28
-rw-r--r--  1 hadoop hadoop  921 Feb 26 18:14 fstab
[hadoop@xiaomazi ~]$
[root@xiaomazi ~]# find /tmp -user hadoop
/tmp/fstab
[root@xiaomazi ~]#

2).尋找檔案的屬組是hadoop使用者的檔案:
[root@xiaomazi ~]# find /tmp -group hadoop
/tmp/fstab
[root@xiaomazi ~]#

 

4.根據UID/GID來尋找:
    -uid UID
    -gid GID
  如果我將Fedora使用者刪除,沒有加選項-r,就不會刪除使用者檔案的;如果檔案的屬主屬組不在了,會發生什麼問題呢?但是,如果此前不確定使用者名稱,也可以使用uid的;


應用舉例:
 1).尋找/tmp目錄下uid是501的所有檔案:
[root@xiaomazi ~]# useradd fedora -->建立使用者
[root@xiaomazi ~]# su - fedora -->切換到fedora使用者
[fedora@xiaomazi ~]$ cp/etc/inittab/tmp/-->以fedora使用者來複製檔案
[fedora@xiaomazi ~]$ ls-l /tmp/
total 28
-rw-r--r--  1 hadoop hadoop  921 Feb 26 18:14 fstab
-rw-r--r--  1 fedora fedora  884 Feb 26 18:22 inittab
[fedora@xiaomazi ~]$ exit
logout
[root@xiaomazi ~]# userdel fedora -->類比刪除使用者
[root@xiaomazi ~]# ls -l /tmp/
total 28
-rw-r--r--  1 hadoop hadoop  921 Feb 26 18:14 fstab
-rw-r--r--  1    501    501  884 Feb 26 18:22 inittab  -->注意:現在屬主屬組屬於501
[root@xiaomazi ~]# find /tmp -user fedroa -->這是找不到的啦!
find: `fedroa' is not the name of a known user
[root@xiaomazi ~]# find /tmp -uid 501 -->假設我們知道fedora的uid,就可以全域範圍的尋找fedora的檔案了.
/tmp/inittab
[root@xiaomazi ~]#


5.根據-nouser、-nogroup: 尋找沒有屬主、屬組的檔案;
  -nouser:尋找沒有屬主的檔案,即該檔案的屬主在/etc/passwd中不存在。
  -nogroup: 尋找沒有屬組的檔案,即該檔案所屬的組在/etc/group中不存在。


應用舉例:
1).假如說現在就在系統上找沒有屬主的檔案應該怎麼樣找呢?
[root@xiaomazi ~]# find /tmp -nouser
/tmp/inittab
[root@xiaomazi ~]#

 

6.組合條件:
    -a: 與,同時滿足(可以不寫的)
    -o: 或,表示一個滿足就可以
    -not, !:非,取反

應用舉例:

1).尋找/tmp目錄下沒有屬主或屬主為hadoop的檔案:

[root@xiaomazi ~]# find /tmp -nouser -o -user hadoop
/tmp/inittab
/tmp/fstab
[root@xiaomazi ~]#

2).尋找/tmp目錄下屬主為hadoop,並且檔案以.txt結尾的檔案:
[hadoop@xiaomazi ~]$ whoami
hadoop -->目前使用者
[hadoop@xiaomazi ~]$ cd /tmp/
[hadoop@xiaomazi tmp]$ touch word.doc hello.txt
[hadoop@xiaomazi tmp]$ ll -->建立檔案以便測試.
total 28
-rw-r--r--  1hadoop hadoop  921Feb 2618:14fstab
-rw-rw-r--  1hadoop hadoop    0Feb 2618:58hello.txt
-rw-r--r--  1501501884Feb 2618:22inittab
-rw-rw-r--  1hadoop hadoop    0Feb 2618:58word.doc
root使用者
[root@xiaomazi ~]# find /tmp -user hadoop -name "*.txt"
/tmp/hello.txt
[root@xiaomazi ~]#

3).尋找/tmp目錄下屬主為hadoop,並且也不是以.txt結尾的檔案:

[root@xiaomazi ~]# find /tmp -user hadoop -a -not -name "*.txt"
/tmp/fstab
/tmp/word.doc
[root@xiaomazi ~]#

4).尋找/tmp目錄下屬主不是hadoop,並且也不是以.txt結尾的檔案
  I.使用的是-a選項:
[root@xiaomazi tmp]# find /tmp -not -user hadoop -a -not -name "*.txt"
/tmp
/tmp/inittab
/tmp/.ICE-unix
[root@xiaomazi tmp]#

  II.使用的是-o選項:

[root@xiaomazi tmp]#
[root@xiaomazi tmp]# find /tmp -not \( -user hadoop -o -name "*.txt" \)
/tmp
/tmp/inittab
/tmp/.ICE-unix
[root@xiaomazi tmp]#

5).尋找/tmp目錄下屬主不是hadoop,或者不是以.txt結尾的:
[root@xiaomazi tmp]# find /tmp -not -user hadoop -o -not -name "*.txt"
/tmp
/tmp/inittab
/tmp/fstab
/tmp/word.doc
/tmp/.ICE-unix
[root@xiaomazi tmp]#

 

6.根據檔案類型尋找:

    -type: 根據檔案類型尋找
        f: 普通檔案
        d: 目錄
        b: 塊裝置
        c: 字元裝置
        l: 符號連結檔案
        p: 具名管道
        s: 通訊端


應用舉例:
1).將/tmp目錄下的目錄顯示出來:
[root@xiaomazi tmp]# find /tmp -type d
/tmp
/tmp/.ICE-unix
[root@xiaomazi tmp]#

2).尋找/tmp目錄下的普通檔案顯示出來:
[root@xiaomazi tmp]# find /tmp -type f
/tmp/inittab
/tmp/fstab
/tmp/word.doc
/tmp/hello.txt
[root@xiaomazi tmp]#

  • 1
  • 2
  • 3
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.