如何使用find命令在Linux中查找文件


Linux Find命令是Linux系統管理員工具庫中最強大的工具之一。

Find是一個命令行實用程序,它允許您根據用戶給定的表達式搜索目錄層次結構中的文件和目錄,並對每個匹配的文件應用用戶指定的操作。

您可以使用find命令根據文件權限,類型,日期,所有權,大小等搜索文件。它還可以與其他工具(如grep或sed)結合使用,以對這些文件執行操作。

Linux查找命令語法

在討論如何使用find命令之前,讓我們先回顧一下基本語法。

find實用程序表達式采用以下形式:

find [options] [path...] [expression]

options屬性控制符號鏈接,調試選項和優化方法的處理。
    path ...屬性定義find將搜索文件的起始目錄。
    expression屬性由選項,搜索模式和由運算符分隔的操作組成。

 

我們來看看以下命令:

linuxidc@linuxidc:~$ find  -L /home/linuxidc/linuxmi/ -name "*.js" -exec chmod 644 {} \;

此命令包含一個參數-L(options),它允許find跟隨符號鏈接,在/home/linuxidc/linuxmi/ (path…)下搜索所有以.js(expression)結尾的文件的整個目錄樹,並設置所有匹配的權限 文件到644。

 

按類型查找文件

要指定要查找的文件的類型,請使用-type參數。

您可以使用以下描述符指定文件類型:

f:常規文件
d:目錄
l:符號鏈接
c:字符設備
b:塊設備
p:命名管道(FIFO)
s:套接字

例如,如果要查找當前目錄中的所有目錄,只需運行:

linuxidc@linuxidc:~/linuxmi$ find . -type d
.
./www.linuxidc.com
./m.linuxidc.com
./linuxidc.com
linuxidc@linuxidc:~/linuxmi$

 

或者,如果要列出系統類型上的所有字符設備:

find / -type c

 

要將所有文件權限更改為644並將所有目錄權限更改為755,請遞歸運行以下命令:

linuxidc@linuxidc:~/linuxmi$ find /home/linuxidc/linuxmi -type d -exec chmod 0755 {} \;
linuxidc@linuxidc:~/linuxmi$ find /home/linuxidc/linuxmi -type f -exec chmod 0644 {} \;

 

按名稱查找文件

按名稱查找文件可能是find命令最常用的用法。 要按名稱查找文件,請將-name選項與要搜索的文件的名稱一起傳遞。

要在/home/linuxidc/linuxmi目錄中搜索名為document.pdf的文件,您將使用以下命令:

linuxidc@linuxidc:~$ sudo find /home/linuxidc/linuxmi -type f -name linuxidc.pdf
[sudo] linuxidc 的密碼: 
/home/linuxidc/linuxmi/linuxidc.pdf
linuxidc@linuxidc:~$ sudo find /home/linuxidc -type f -name linuxidc.pdf
/home/linuxidc/linuxmi/linuxidc.pdf
/home/linuxidc/Documents/linuxidc.pdf
linuxidc@linuxidc:~$

 

如果要進行不區分大小寫的搜索,請使用-iname更改-name選項:

sudo find /home/linuxidc -type f -iname linuxidc.pdf

上面的命令將匹配linuxidc.pdf,LINUXIDC.pdf ...。

 

按擴展名查找文件

按擴展名搜索文件按名稱搜索文件相同。 例如,如果要查找/home/linuxidc目錄中以.log.gz結尾的所有文件,可以使用:

linuxidc@linuxidc:~$ su -
密碼: 
root@linuxidc:~# find /home/linuxidc -type f -name '*.log.gz'
/home/linuxidc/linuxmi/linuxidc.log.gz
root@linuxidc:~#

 

值得一提的是,當我們使用通配符時,我們必須引用模式或使用反斜杠\來轉義星號*符號,以便它不會被shell解釋。

如果要查找與正則 *.log.gz不匹配的所有文件,可以使用-not參數,例如查找所有不以*.log.gz結尾的文件,您將使用:

linuxidc@linuxidc:~$ find /home/linuxidc/linuxmi -type f -not -name '*.log.gz'
/home/linuxidc/linuxmi/linuxidc.pdf
/home/linuxidc/linuxmi/linuxidc.js
linuxidc@linuxidc:~$

 

按大小查找文件

要根據大小查找文件,只需傳遞-size參數和大小標准。 您可以使用以下后綴來指定大小:

b:512字節塊(默認)
c:字節
w:雙字節字
k:Kilobytes
M:兆字節
G:千兆字節

 

假設您正在'/ tmp'目錄中搜索正好1024字節的所有文件。 你將不得不運行如下命令:

linuxidc@linuxidc:~$ su -
密碼: 
root@linuxidc:~# find /tmp -type f -size 1024c

 

find命令還允許您搜索大於或小於指定大小的文件。

在下面的示例中,我們將在當前工作目錄中搜索小於1MB的所有文件,請注意size值之前的減號:

root@linuxidc:~# find . -type f -size -1M
./.local/share/zeitgeist/fts.index/flintlock
./.local/share/Trash/files/wine-Ubuntu-wine-builds-artful.list.save
./.local/share/gnome-settings-daemon/input-sources-converted
./.mozilla/firefox/jrqxh55p.default/SecurityPreloadState.txt
./.mozilla/firefox/jrqxh55p.default/AlternateServices.txt
./.mozilla/firefox/jrqxh55p.default/.parentlock
./.config/enchant/en_US.exc
./.config/enchant/en_US.dic
root@linuxidc:~#

 

 

 

如果要搜索大小超過1MB的文件,則需要使用加號+符號:

root@linuxidc:~# find . -type f -size +1M

 

您甚至可以搜索大小范圍內的文件,例如以下命令將查找3到4 MB之間的所有文件:

root@linuxidc:~# find . -type f -size +3M -size 4M

 

 

按修改日期查找文件

find命令還可以根據上次修改,訪問或更改時間搜索文件。

與按尺寸搜索時相同,我們也可以使用加號和減號來指定大於或小於。

讓我們說幾天前你修改了一個dovecot配置文件,但你忘記了文件名。您可以輕松過濾/home/linuxidc/conf.d/目錄中以.conf結尾的所有文件,並在過去10天內修改過:

find /home/linuxidc/conf.d -name "*.conf" -mtime 10

以下是使用-daystart選項根據修改日期過濾文件的另一個示例。列出/home目錄中20天或更久以前修改過的所有文件:

find /home -mtime +20 -daystart

 

按權限查找文件

如果要使用find命令根據文件權限過濾文件,則需要使用-perm參數。

要在/home/linuxidc/html目錄中查找權限為775的所有文件,您將使用:

find /home/linuxidc/html -perm 644

 

您可以在數字模式前加上減號 - 或斜杠/。

如果使用/作為前綴,則至少一個類別(用戶,組或其他)必須至少為文件匹配設置相應的位。請考慮以下示例命令:

find . -perm 444

 

上述命令將匹配為用戶,組或其他人設置了讀權限的所有文件。

如果使用 - 作為前綴,則必須至少設置要匹配的文件。

以下命令將搜索對其所有者具有讀取和權限的文件,但該組和其他用戶可以讀取但不寫入的文件:

find . -perm -664

 

按所有者查找文件

要查找特定用戶或組擁有的文件,可以使用-user和-group選項。

例如,要搜索用戶linuxidc擁有的所有文件和目錄,只需運行:

find / -user linuxidc

 

這是更高級的示例,假設您要查找用戶www-data擁有的所有文件,並將匹配文件的所有權從www-data更改為linuxmi:

find / -user www-data -type f  -exec chown linuxmi {} \;

 

查找和刪除文件

要刪除所有匹配的文件,請將參數-delete添加到匹配表達式的末尾。

僅當您確定結果僅與要刪除的文件匹配時,請確保使用此選項。在使用-delete選項之前打印文件總是一個好主意。

例如,要刪除/home/linuxidc/中以.temp結尾的所有文件,您將使用:

find /home/linuxidc/ -name `*.temp` -delete

 

總結

在本教程中,您學習了如何根據各種標准使用Linux查找實用程序,現在您已基本了解如何在Linux系統上查找文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM