首頁  >  文章  >  php教程  >  15個實用的Linux find指令範例

15個實用的Linux find指令範例

高洛峰
高洛峰原創
2016-12-14 17:32:091362瀏覽

除了在一個目錄結構下查找文件這種基本的操作,你還可以用find命令實現一些實用的操作,使你的命令列之旅更加簡易。

本文將介紹15種無論是於新手或老鳥都非常有用的Linux find指令。

首先,在你的home目錄下面建立下面的空文件,來測試下面的find指令範例。

01    # vim create_sample_files.sh    

02    touch MybashProgram.sh    

03    Program.c    

05    touch Program.c    

06    

07    mk 

09    

10    touch MybashProgram.sh    

11    touch mycprogram.c   🠎 touch Program.c    

14    

15    # chmod +x create_sample_files.sh    

16    ./create_sample_files.sh    

18    

19    # ls -R    

20   .:            MybashProgram.sh  MyCProgram.c    

22    create_sample_files.sh  mycprogram.c   backup:    

25    MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c    

1. 基本使用檔案名稱來找出檔案

這是一個基本用法指令的一個基本用法。下面的範例展示了以MyCProgram.c作為查找名在目前目錄及其子目錄中尋找檔案的方法。

1    # find -name "MyCProgram.c"    

2    ./backup/MyCProgram.c    

3    ./找出CProgram.c My

3    ind命令的一個基本用法。下面的範例展示了以MyCProgram.c作為查找名在目前目錄及其子目錄中尋找檔案的方法,忽略了大小寫。

1    # find -iname "MyCProgram.c"    

2    ./mycprogram.c    

3   遠   

5    ./MyCProgram.c    

3. 使用mindepth和maxdepth限定搜尋指定目錄的深度

在root目錄及其子目錄下尋找passwd檔案。

1    # find / -name passwd    

1    # find / -name passwd    

2    ./usr/share/doc/nss_ldap-253/pam.d/passwd    

🠎 ./etc/pam.d/密碼-name passwd    

2    ./etc/passwd    

在root目錄下及其最大兩層深度的子目錄中尋找passwd檔案. (例如root — level 1, and two sub-directories — level 2.

1    # find / -maxdepth 3 -name passwd    

2    ./usr/bin/passwd    

3  . 

在第二層子目錄和第四層子目錄之間找passwd檔。

1    # find -mindepth 3 -maxdepth 5 -name passwd    

2    ./usr/bin/passwd    

.的文件上執行指令

下面的例子展示了find指令來計算所有不區分大小寫的檔案名為「MyCProgram.c」的檔案的MD5驗證和。 {}將會被目前檔案名稱取代。

1    find -iname "MyCProgram.c" -exec md5sum {} ;    

2    d41d8cd98f00b204e9800998  d41d8cd98f00b204e9800998.ecf   d41d8cd98f00b204e9800998ecf8427e  ./backup/mycprogram.c    

4    d41d8cd98f00b

4   Myd41d8cd98f00b

4   ”

5    d41d8cd98f00b204e9800998ecf8427e  ./MyCProgram.c    

5. 相反符合

顯示所有的名字不是MyCProgram.c的檔案或目錄。由於maxdepth是1,所以只會顯示目前目錄下的檔案和目錄。

1    find -maxdepth 1 -not -iname "MyCProgram.c"    

2    .    

3    ./MybashProgram.sh    

4    ./create_sample_files.sh    

Program.c    

6. 使用inode編號找出檔案

任何一個檔案都有一個獨一無二的inode編號,藉此我們可以區分文件。建立兩個名字相似的文件,例如一個有空格結尾,一個沒有。

1    touch "test-file-name"    

1    touch "test-file-name"    

2    

3    # touch "test-file-name "   Not

5    

6    # ls -1 test*    

7    test-file-name    

8    test-file-name    

從ls的輸出無法區分哪個檔案有空格結尾。使用選項-i,可以看到檔案的inode編號,藉此可以區分這兩個檔案。

1    ls -i1 test*    

2    16187429 test-file-name    

3  inode編號。在此,find指令用inode編號重新命名了一個檔案。

1    find -inum 16187430 -exec mv {} new-test-file-name ;    

2    

430 new-test-file-name    

5    16187429 test- file-name    

你可以在你想對那些像上面一樣的糟糕命名的檔案做某些操作時使用這項技術。例如,名為file?.txt的檔案名稱中有一個特殊字元。若你想執行“rm file?.txt”,下面所示的所有三個檔案都會被刪除。所以,採用下面的步驟來刪除"file?.txt"檔案。

1    ls    

2    file1.txt  file2.txt  file?.txt    

找到每個檔案的每個檔案編號。

1    ls -i1    


2    804178 file1.txt    

3    804179    

3    804179    

3    804179     txt 

如下圖所示: 使用inode編號來刪除那些有特殊符號的檔案名稱。

1    find -inum 804180 -exec rm {} ;    

2    

3  

5    [Note: The file with name "file?.txt" is now removed]

7. 根據文件權限查找文件

下面的操作時合理的:

找到具有指定權限的文件

忽略其他權限位,檢查是否和指定權限匹配

根據給定的八進制/符號表達的權限搜尋

此例中,假設目錄包含以下檔案。注意這些文件的權限不同。

1    ls -l    

2    total 0    

3    -rwxrwxrwx 1

3    -rwxrwxrwx 1   -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read    

5    ---------- 1 root root 0 2009-02-19 20:31 no_for_all    

6 20:31 no_for_all    

6 19 20:29 ordinary_file    

7    -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read  -19 20:27 others_can_only_read    

找到具有群組讀取權限的檔案。使用下面的命令來找到當前目錄下對同組用戶具有讀取權限的文件,忽略該文件的其他權限。

1    find . -perm -g=r -type f -exec ls -l {} ;    

2    -rw-r--r-- 1 根

3    -rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all    

4    ----r----- 1 root root 0 205

5 -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read    

找到對群組使用者俱有唯讀權限的檔案。

1    find . -perm g=r -type f -exec ls -l {} ;    

2    ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read    

找到對群組使用者俱有唯讀權限的檔案(使用八進位權限形式)。

1    find . -perm 040 -type f -exec ls -l {} ;    

2    ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read    

8 . 找到home目錄及子目錄下所有的空檔(0位元組檔案)

下面指令的輸出檔絕大多數都是鎖定檔案盒其他程式所建立的place hoders

1    find ~ -empty    

只列出你home目錄裡的空白檔案。

1    find . -maxdepth 1 -empty    


 只列出當年目錄下的非隱藏式空白檔案。

1    find . -maxdepth 1 -empty -not -name ".*"    

9. 找出5個最大的檔案

下面的指令列出目前目錄及子目錄下的5個最大的檔案。這會需要一點時間,取決於命令需要處理的檔案數量。

1    find . -type f -exec ls -s {} ; | sort -n -r | head -5    

10. 求出5個最小的檔案

5個相同的檔案sort的順序是降序。

1    find . -type f -exec ls -s {} ; | sort -n  | head -5    

上面的指令中,且有可能你看到的只是檔案(0位元組)。如此,你可以使用下面的命令列出最小的文件,而不是0位元組文件。

1    find . -not -empty -type f -exec ls -s {} ; | sort -n  | head -5    

11。 find . -type s    

找出所有的目錄

1    find . -type d    

找出所有的一般檔案

1 1

1    find . -type f - name ".*"    

查找所有隱藏的目錄

1    find -type d -name ".*"    

12. 透過和其他文件比較修改時間來尋找文件來修改文件顯示。下面的find指令將顯示所有的在ordinary_file之後會建立修改的檔案。

01    ls -lrt    

02    total 0    

03    -rw-r----- 1 root root02009  

04    ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read    

05    -rw------- 1 root root 0 2009-02-19 20:29 ordinary_root root 1 root root 0 2009-02-19 20:30 everybody_read    

07    -rwxrwxrwx 1 root root 0 2009-02 -19 20:31 no_for_all    

09    

10    # find -newer ordinary_file    

11    .

13    ./all_for_all    

14    ./no_for_all    

13. 以檔案大小找出檔案

使用-size選項可以透過檔案大小找到檔案。

查找比指定文件更大的文件

1    find ~ -size +100M    

查找比指定文件小的文件

1    f   find ~ -size 100M    

注意: – 指比給定尺寸小,+ 指比給定尺寸大。沒有符號代表和給定尺寸完全一樣大。

14. 給常用find操作取別名

若你發現有些東西很有用,你可以給他取別名。並且在任何你希望的地方執行。

常用的刪除a.out檔。

1    alias rmao="find . -iname a.out -exec rm {} ;"    

2    # rmao    

刪除程式所產生的檔案。

1    alias rmc="find . -iname core -exec rm {} ;"    

2    # rmc    {} ;"    

2    # rmc   

15. 用下的命令刪除大型檔案。

1    find / -type f -name *.zip -size +100M -exec rm -i {} ;"    

用別名rm100mrmgrm -i {} ;"    

用別名rm100mrmgrm ,rm5g的單一類別名稱來刪除所有大於1G,2G,5G的檔案。 2    # alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} ;"    

3    # alias rm2g="find / -type f -3    # alias rm2g="find / -type f -name *.tar -size + 2G -exec rm -i {} ;"    

4    # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} ;」

7    # rm1g    

8    # rm2g    

9    # rm5g    

指令為不同

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:Find命令實戰下一篇:Find命令實戰