媽咪 我找到了! 15個實用的Linux find命令示例
除了在一個目錄結構下查詢檔案這種基本的操作,你還可以用find命令實現一些實用的操作,使你的命令列之旅更加簡易。
本文將介紹15種無論是於新手還是老鳥都非常有用的Linux find命令。
首先,在你的home目錄下面建立下面的空檔案,來測試下面的find命令示例。
# vim create_sample_files.sh touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c mkdir backup cd backup touch MybashProgram.sh touch mycprogram.c touch MyCProgram.c touch Program.c # chmod +x create_sample_files.sh # ./create_sample_files.sh # ls -R .: backup MybashProgram.sh MyCProgram.c create_sample_files.sh mycprogram.c Program.c ./backup: MybashProgram.sh mycprogram.c MyCProgram.c Program.c
1. 用檔名查詢檔案
這是find命令的一個基本用法。下面的例子展示了用MyCProgram.c作為查詢名在當前目錄及其子目錄中查詢檔案的方法。
# find -name "MyCProgram.c" ./backup/MyCProgram.c ./MyCProgram.c
2.用檔名查詢檔案,忽略大小寫
這是find命令的一個基本用法。下面的例子展示了用MyCProgram.c作為查詢名在當前目錄及其子目錄中查詢檔案的方法,忽略了大小寫。
# find -iname "MyCProgram.c" ./mycprogram.c ./backup/mycprogram.c ./backup/MyCProgram.c ./MyCProgram.c
3. 使用mindepth和maxdepth限定搜尋指定目錄的深度
在root目錄及其子目錄下查詢passwd檔案。
# find / -name passwd ./usr/share/doc/nss_ldap-253/pam.d/passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
在root目錄及其1層深的子目錄中查詢passwd. (例如root — level 1, and one sub-directory — level 2)
# find -maxdepth 2 -name passwd ./etc/passwd
在root目錄下及其最大兩層深度的子目錄中查詢passwd檔案. (例如 root — level 1, and two sub-directories — level 2 and 3 )
# find / -maxdepth 3 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd ./etc/passwd
在第二層子目錄和第四層子目錄之間查詢passwd檔案。
# find -mindepth 3 -maxdepth 5 -name passwd ./usr/bin/passwd ./etc/pam.d/passwd
4. 在find命令查詢到的檔案上執行命令
下面的例子展示了find命令來計算所有不區分大小寫的檔名為“MyCProgram.c”的檔案的MD5驗證和。{}將會被當前檔名取代。
# find -iname "MyCProgram.c" -exec md5sum {} \; d41d8cd98f00b204e9800998ecf8427e ./mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/mycprogram.c d41d8cd98f00b204e9800998ecf8427e ./backup/MyCProgram.c d41d8cd98f00b204e9800998ecf8427e ./MyCProgram.c
5. 相反匹配
顯示所有的名字不是MyCProgram.c的檔案或者目錄。由於maxdepth是1,所以只會顯示當前目錄下的檔案和目錄。
# find -maxdepth 1 -not -iname "MyCProgram.c" . ./MybashProgram.sh ./create_sample_files.sh ./backup ./Program.c
6. 使用inode編號查詢檔案
任何一個檔案都有一個獨一無二的inode編號,藉此我們可以區分檔案。建立兩個名字相似的檔案,例如一個有空格結尾,一個沒有。
# touch "test-file-name" # touch "test-file-name " [Note: There is a space at the end] # ls -1 test* test-file-name test-file-name
從ls的輸出不能區分哪個檔案有空格結尾。使用選項-i,可以看到檔案的inode編號,藉此可以區分這兩個檔案。
# ls -i1 test* 16187429 test-file-name 16187430 test-file-name
你可以如下面所示在find命令中指定inode編號。在此,find命令用inode編號重新命名了一個檔案。
# find -inum 16187430 -exec mv {} new-test-file-name \; # ls -i1 *test* 16187430 new-test-file-name 16187429 test-file-name
你可以在你想對那些像上面一樣的糟糕命名的檔案做某些操作時使用這一技術。例如,名為file?.txt的檔名字中有一個特殊字元。若你想執行“rm file?.txt”,下面所示的所有三個檔案都會被刪除。所以,採用下面的步驟來刪除"file?.txt"檔案。
# ls file1.txt file2.txt file?.txt
找到每一個檔案的inode編號。
# ls -i1 804178 file1.txt 804179 file2.txt 804180 file?.txt
如下所示: 使用inode編號來刪除那些具有特殊符號的檔名。
# find -inum 804180 -exec rm {} \; # ls file1.txt file2.txt [Note: The file with name "file?.txt" is now removed]
7. 根據檔案許可權查詢檔案
下面的操作時合理的:
- 找到具有指定許可權的檔案
- 忽略其他許可權位,檢查是否和指定許可權匹配
- 根據給定的八進位制/符號表達的許可權搜尋
此例中,假設目錄包含以下檔案。注意這些檔案的許可權不同。
# ls -l total 0 -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read ---------- 1 root root 0 2009-02-19 20:31 no_for_all -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
找到具有組讀許可權的檔案。使用下面的命令來找到當前目錄下對同組使用者具有讀許可權的檔案,忽略該檔案的其他許可權。
# find . -perm -g=r -type f -exec ls -l {} \; -rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read -rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read
找到對組使用者具有隻讀許可權的檔案。
# find . -perm g=r -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
找到對組使用者具有隻讀許可權的檔案(使用八進位制許可權形式)。
# find . -perm 040 -type f -exec ls -l {} \; ----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
8. 找到home目錄及子目錄下所有的空檔案(0位元組檔案)
下面命令的輸出檔案絕大多數都是鎖定檔案盒其他程式建立的place hoders
# find ~ -empty
只列出你home目錄裡的空檔案。
# find . -maxdepth 1 -empty
只列出當年目錄下的非隱藏空檔案。
# find . -maxdepth 1 -empty -not -name ".*"
9. 查詢5個最大的檔案
下面的命令列出當前目錄及子目錄下的5個最大的檔案。這會需要一點時間,取決於命令需要處理的檔案數量。
# find . -type f -exec ls -s {} \; | sort -n -r | head -5
10. 查詢5個最小的檔案
方法同查詢5個最大的檔案類似,區別只是sort的順序是降序。
# find . -type f -exec ls -s {} \; | sort -n | head -5
上面的命令中,很可能你看到的只是空檔案(0位元組檔案)。如此,你可以使用下面的命令列出最小的檔案,而不是0位元組檔案。
# find . -not -empty -type f -exec ls -s {} \; | sort -n | head -5
11. 使用-type查詢指定檔案型別的檔案
只查詢socket檔案
# find . -type s
查詢所有的目錄
# find . -type d
查詢所有的一般檔案
# find . -type f
查詢所有的隱藏檔案
# find . -type f -name ".*"
查詢所有的隱藏目錄
# find -type d -name ".*"
12. 通過和其他檔案比較修改時間查詢檔案
顯示在指定檔案之後做出修改的檔案。下面的find命令將顯示所有的在ordinary_file之後建立修改的檔案。
# ls -lrt total 0 -rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read ----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read -rw------- 1 root root 0 2009-02-19 20:29 ordinary_file -rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read -rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all ---------- 1 root root 0 2009-02-19 20:31 no_for_all # find -newer ordinary_file . ./everybody_read ./all_for_all ./no_for_all
13. 通過檔案大小查詢檔案
使用-size選項可以通過檔案大小查詢檔案。
查詢比指定檔案大的檔案
# find ~ -size +100M
查詢比指定檔案小的檔案
# find ~ -size -100M
查詢符合給定大小的檔案
# find ~ -size 100M
注意: – 指比給定尺寸小,+ 指比給定尺寸大。沒有符號代表和給定尺寸完全一樣大。
14. 給常用find操作取別名
若你發現有些東西很有用,你可以給他取別名。並且在任何你希望的地方執行。
常用的刪除a.out檔案。
# alias rmao="find . -iname a.out -exec rm {} \;" # rmao
刪除c程式產生的core檔案。
# alias rmc="find . -iname core -exec rm {} \;" # rmc
15. 用find命令刪除大型打包檔案
下面的命令刪除大於100M的*.zip檔案。
# find / -type f -name *.zip -size +100M -exec rm -i {} \;"
用別名rm100m刪除所有大雨100M的*.tar檔案。使用同樣的思想可以建立rm1g,rm2g,rm5g的一類別名來刪除所有大於1G,2G,5G的檔案。
# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;" # alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;" # alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;" # alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;" # rm100m # rm1g # rm2g # rm5g
Find命令示例(第二部分)
若你喜歡這篇關於find命令的Mommy文章,別忘了看看第二部分的關於find命令的Daddy文章。
原文地址:http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples/
相關文章
- Linux 命令列:find 的 26 個用法示例Linux命令列
- Linux 中 17 個 tar 命令實用示例Linux
- Linux 下 cut 命令的 4 個基礎實用的示例Linux
- find 命令及其示例
- 《媽媽咪鴨》淺談
- Linux運維必知必會的命令列:find 的 26 個用法示例!Linux運維命令列
- 15 條實用 Linux/Unix 磁帶管理命令Linux
- 最最實用的30個Linux命令!Linux
- 每天一個linux命令(1):find命令之execLinux
- 通過 find 命令找到你要找的東西
- Linux find 命令詳解Linux
- linux中file命令和find命令Linux
- 80%的人都不會的,15個Linux實用技巧Linux
- 在 Linux 下 9 個有用的 touch 命令示例Linux
- 每天學一個 Linux 命令(15):manLinux
- linux每日命令(20):find命令概覽Linux
- 工作中5個實用的Linux命令Linux
- Linux學習之linux的find命令如何使用?Linux
- Linux下的五個查詢命令:grep、find、locate、whereis、whichLinux
- Linux中11個比較實用的命令列Linux命令列
- 15_編寫第一個自己的Linux的命令Linux
- Linux/Unix重要find命令詳解Linux
- 在 Linux中find命令使用技巧Linux
- linux 查詢檔案命令 findLinux
- linux中查詢find命令的複雜用法Linux
- Linux中ps命令的功能及示例!Linux
- 透過6個示例帶你掌握Linux sed命令!Linux
- 我常用的Linux命令Linux
- 11 個鮮為人知卻超實用的 Linux 命令!Linux
- 超實用的 Linux 高階命令!Linux
- 實用處理字串的linux命令字串Linux
- Linux系統下find、locate命令如何使用?Linux
- find命令
- 5個相見恨晚的Linux命令,每一個都非常實用Linux
- Linux實驗的幾個基礎命令Linux
- 為什麼要謹慎使用Linux find命令?Linux
- 在騰訊實習的兩個多月,我學到了什麼?
- 8個Date命令使用示例
- find -newer命令