佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Linux find命令實(shí)例教程 15個(gè)find命令用法

Linux find命令實(shí)例教程 15個(gè)find命令用法

熱門(mén)標(biāo)簽:電話(huà)機(jī)器人搭建 解決方案 百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 家政服務(wù)網(wǎng)絡(luò) 硅谷的囚徒呼叫中心 服務(wù)器配置 外呼系統(tǒng) 美團(tuán)

除了在一個(gè)目錄結(jié)構(gòu)下查找文件這種基本的操作,你還可以用find命令實(shí)現(xiàn)一些實(shí)用的操作,使你的命令行之旅更加簡(jiǎn)易。
本文將介紹15種無(wú)論是于新手還是老鳥(niǎo)都非常有用的Linux find命令。
首先,在你的home目錄下面創(chuàng)建下面的空文件,來(lái)測(cè)試下面的find命令示例。


復(fù)制代碼
代碼如下:

# 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命令的一個(gè)基本用法。下面的例子展示了用MyCProgram.c作為查找名在當(dāng)前目錄及其子目錄中查找文件的方法。


復(fù)制代碼
代碼如下:

# find -name "MyCProgram.c"
./backup/MyCProgram.c
./MyCProgram.c

2.用文件名查找文件,忽略大小寫(xiě)
這是find命令的一個(gè)基本用法。下面的例子展示了用MyCProgram.c作為查找名在當(dāng)前目錄及其子目錄中查找文件的方法,忽略了大小寫(xiě)。


復(fù)制代碼
代碼如下:

# find -iname "MyCProgram.c"
./mycprogram.c
./backup/mycprogram.c
./backup/MyCProgram.c
./MyCProgram.c

3. 使用mindepth和maxdepth限定搜索指定目錄的深度
在root目錄及其子目錄下查找passwd文件。


復(fù)制代碼
代碼如下:

# 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)


復(fù)制代碼
代碼如下:

# find -maxdepth 2 -name passwd
./etc/passwd

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

復(fù)制代碼
代碼如下:

# find / -maxdepth 3 -name passwd
./usr/bin/passwd
./etc/pam.d/passwd
./etc/passwd

在第二層子目錄和第四層子目錄之間查找passwd文件。
 


復(fù)制代碼
代碼如下:

# find -mindepth 3 -maxdepth 5 -name passwd
./usr/bin/passwd
./etc/pam.d/passwd

4. 在find命令查找到的文件上執(zhí)行命令
下面的例子展示了find命令來(lái)計(jì)算所有不區(qū)分大小寫(xiě)的文件名為“MyCProgram.c”的文件的MD5驗(yàn)證和。{}將會(huì)被當(dāng)前文件名取代。
 


復(fù)制代碼
代碼如下:

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,所以只會(huì)顯示當(dāng)前目錄下的文件和目錄。

復(fù)制代碼
代碼如下:

find -maxdepth 1 -not -iname "MyCProgram.c"
.
./MybashProgram.sh
./create_sample_files.sh
./backup
./Program.c

6. 使用inode編號(hào)查找文件
任何一個(gè)文件都有一個(gè)獨(dú)一無(wú)二的inode編號(hào),借此我們可以區(qū)分文件。創(chuàng)建兩個(gè)名字相似的文件,例如一個(gè)有空格結(jié)尾,一個(gè)沒(méi)有。


復(fù)制代碼
代碼如下:

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的輸出不能區(qū)分哪個(gè)文件有空格結(jié)尾。使用選項(xiàng)-i,可以看到文件的inode編號(hào),借此可以區(qū)分這兩個(gè)文件。
 


復(fù)制代碼
代碼如下:

ls -i1 test*
16187429 test-file-name
16187430 test-file-name

可以如下面所示在find命令中指定inode編號(hào)。在此,find命令用inode編號(hào)重命名了一個(gè)文件。
 


復(fù)制代碼
代碼如下:

find -inum 16187430 -exec mv {} new-test-file-name \;
# ls -i1 *test*
16187430 new-test-file-name
16187429 test-file-name

可以在你想對(duì)那些像上面一樣的糟糕命名的文件做某些操作時(shí)使用這一技術(shù)。
例如,名為file?.txt的文件名字中有一個(gè)特殊字符。
若你想執(zhí)行“rm file?.txt”,下面所示的所有三個(gè)文件都會(huì)被刪除。
所以,采用下面的步驟來(lái)刪除”file?.txt”文件。
 


復(fù)制代碼
代碼如下:

ls
file1.txt file2.txt file?.txt

找到每一個(gè)文件的inode編號(hào)。
 


復(fù)制代碼
代碼如下:

ls -i1
804178 file1.txt
804179 file2.txt
804180 file?.txt

如下所示:?使用inode編號(hào)來(lái)刪除那些具有特殊符號(hào)的文件名。
 


復(fù)制代碼
代碼如下:

find -inum 804180 -exec rm {} \;
# ls
file1.txt file2.txt
[Note: The file with name "file?.txt" is now removed]

7. 根據(jù)文件權(quán)限查找文件
下面的操作時(shí)合理的:
找到具有指定權(quán)限的文件
忽略其他權(quán)限位,檢查是否和指定權(quán)限匹配
根據(jù)給定的八進(jìn)制/符號(hào)表達(dá)的權(quán)限搜索
此例中,假設(shè)目錄包含以下文件。注意這些文件的權(quán)限不同。
 


復(fù)制代碼
代碼如下:

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

找到具有組讀權(quán)限的文件。使用下面的命令來(lái)找到當(dāng)前目錄下對(duì)同組用戶(hù)具有讀權(quán)限的文件,忽略該文件的其他權(quán)限。
 


復(fù)制代碼
代碼如下:

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

找到對(duì)組用戶(hù)具有只讀權(quán)限的文件。
 


復(fù)制代碼
代碼如下:

find . -perm g=r -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read

找到對(duì)組用戶(hù)具有只讀權(quán)限的文件(使用八進(jìn)制權(quán)限形式)。
 


復(fù)制代碼
代碼如下:

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字節(jié)文件)
下面命令的輸出文件絕大多數(shù)都是鎖定文件盒其他程序創(chuàng)建的place hoders
find ~ -empty
只列出你home目錄里的空文件。
find . -maxdepth 1 -empty
只列出當(dāng)年目錄下的非隱藏空文件。
find . -maxdepth 1 -empty -not -name ".*"

9. 查找5個(gè)最大的文件
下面的命令列出當(dāng)前目錄及子目錄下的5個(gè)最大的文件。這會(huì)需要一點(diǎn)時(shí)間,取決于命令需要處理的文件數(shù)量。
 


復(fù)制代碼
代碼如下:

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

10. 查找5個(gè)最小的文件
方法同查找5個(gè)最大的文件類(lèi)似,區(qū)別只是sort的順序是降序。
 


復(fù)制代碼
代碼如下:

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

上面的命令中,很可能你看到的只是空文件(0字節(jié)文件)。如此,你可以使用下面的命令列出最小的文件,而不是0字節(jié)文件。
 


復(fù)制代碼
代碼如下:

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

11. 使用-type查找指定文件類(lèi)型的文件
 

只查找socket文件
find . -type s
查找所有的目錄
find . -type d
查找所有的一般文件
find . -type f
查找所有的隱藏文件
find . -type f -name ".*"
查找所有的隱藏目錄
find -type d -name ".*"
12. 通過(guò)和其他文件比較修改時(shí)間查找文件
顯示在指定文件之后做出修改的文件。下面的find命令將顯示所有的在ordinary_file之后創(chuàng)建修改的文件。
 


復(fù)制代碼
代碼如下:

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. 通過(guò)文件大小查找文件

使用-size選項(xiàng)可以通過(guò)文件大小查找文件。
 

查找比指定文件大的文件
find ~ -size +100M
查找比指定文件小的文件
find ~ -size -100M
查找符合給定大小的文件
find ~ -size 100M
注意: – 指比給定尺寸小,+ 指比給定尺寸大。沒(méi)有符號(hào)代表和給定尺寸完全一樣大。

14. 給常用find操作取別名

若你發(fā)現(xiàn)有些東西很有用,你可以給他取別名。并且在任何你希望的地方執(zhí)行。
 

復(fù)制代碼
代碼如下:

常用的刪除a.out文件。
alias rmao="find . -iname a.out -exec rm {} \;"
# rmao
刪除c程序產(chǎn)生的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文件。使用同樣的思想可以創(chuàng)建rm1g,rm2g,rm5g的一類(lèi)別名來(lái)刪除所有大于1G,2G,5G的文件。
 

復(fù)制代碼
代碼如下:

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

標(biāo)簽:韶關(guān) 烏蘭察布 防城港 臨沂 撫州 邢臺(tái) 南昌 北海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux find命令實(shí)例教程 15個(gè)find命令用法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話(huà)咨詢(xún)

    • 400-1100-266
    礼泉县| 镇康县| 天等县| 黎平县| 夹江县| 连城县| 庄河市| 惠东县| 平阳县| 中山市| 江达县| 德惠市| 巴中市| 离岛区| 平乡县| 青阳县| 荔波县| 道真| 西乌珠穆沁旗| 宁蒗| 历史| 镶黄旗| 互助| 白河县| 乌鲁木齐县| 天镇县| 屯昌县| 丰县| 澄城县| 松原市| 嘉黎县| 博爱县| 井陉县| 赫章县| 虹口区| 囊谦县| 邳州市| 若尔盖县| 苏尼特右旗| 会同县| 德保县|