如何在使用 Linux 命令查找當前目錄底下的文件夾的子目錄中的某個文件?

看起來有點拗口,畫了個圖,圖更拗眼,湊合著看吧.....

怎麼找到那個左下角的?


zsh你值得擁有

ls **/filename


find ./ -name? -user? -mtime? -size?

總要給個條件吧,我怎麼知道你要找什麼文件


按文件名查找,我最喜歡用「ag -g 正則」了。

ggreer/the_silver_searcher · GitHub


在linux下查找,肯定是用find命令最方便。

例如:

find . -type f -name "yourfile.txt"

還可以在你查找的文件上進行操作,例如:

find . -type f -name "*.txt" -exec wc -l {} ;
find . -type f -name "*.txt" | xargs wc -l

此外,有時候我也會用locate命令。

locate python


如果你是要查找文件的內容的話, 可以使用grep -r


使用find命令

find . -type f -name 123.txt
解釋,在當前目錄以及所有子目錄中,找文件,名字是123.txt,名字如果有空格可以用""引起來。
其中名字還可以使用通配符,如*.java,a???.java,[abc]d.txt
如果通配符還不能滿足你,還可以使用-regex,啟用正則表達式,具體自己去研究。


ls **/filename


whereis filename,最簡單


你可以使用find命令。來進行查找。

find 是linux里一個非常重要的命令。,它可以尋找我們想要的文件 或者目錄。

find 後面跟的是一個路徑,告訴find 要去哪裡找。

-type f 表示文件要尋找的是文件

-name 「*.txt」 表示文件名為 .txt結尾的 所有文件。 *表示所有 。

下面是find的具體用法。希望能夠幫助你。我們一起學習和探討。

find命令用來在指定目錄下查找文件。

任何位於參數之前的字元串都將被視為欲查找的目錄名。

如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。

並且將查找到的子目錄和文件全部進行顯示。

語法

find(選項)(參數)

選項

-amin&<分鐘&>:查找在指定時間曾被存取過的文件或目錄,單位以分鐘計算;

-anewer&<參考文件或目錄&>:查找其存取時間較指定文件或目錄的存取時間更接近現在的文件或目錄;

-atime&<24小時數&>:查找在指定時間曾被存取過的文件或目錄,單位以24小時計算;

-cmin&<分鐘&>:查找在指定時間之時被更改過的文件或目錄;

-cnewer&<參考文件或目錄&>查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄;

-ctime&<24小時數&>:查找在指定時間之時被更改的文件或目錄,單位以24小時計算;

-daystart:從本日開始計算時間;

-depth:從指定目錄下最深層的子目錄開始查找;

-expty:尋找文件大小為0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄;

-exec&<執行指令&>:假設find指令的回傳值為True,就執行該指令;

-false:將find指令的回傳值皆設為False;

-fls&<列表文件&>:此參數的效果和指定「-ls」參數類似,但會把結果保存為指定的列表文件;

-follow:排除符號連接;

-fprint&<列表文件&>:此參數的效果和指定「-print」參數類似,但會把結果保存成指定的列表文件;

-fprint0&<列表文件&>:此參數的效果和指定「-print0」參數類似,但會把結果保存成指定的列表文件;

-fprintf&<列表文件&>&<輸出格式&>:此參數的效果和指定「-printf」參數類似,但會把結果保存成指定的列表文件;

-fstype&<文件系統類型&>:只尋找該文件系統類型下的文件或目錄;

-gid&<群組識別碼&>:查找符合指定之群組識別碼的文件或目錄;

-group&<群組名稱&>:查找符合指定之群組名稱的文件或目錄;

-help或——help:在線幫助;
-ilname&<範本樣式&>:此參數的效果和指定「-lname」參數類似,但忽略字元大小寫的差別;

-iname&<範本樣式&>:此參數的效果和指定「-name」參數類似,但忽略字元大小寫的差別;

-inum:查找符合指定的inode編號的文件或目錄;

-ipath&<範本樣式&>:此參數的效果和指定「-path」參數類似,但忽略字元大小寫的差別;

-iregex&<範本樣式&>:此參數的效果和指定「-regexe」參數類似,但忽略字元大小寫的差別;

-links&<連接數目&>:查找符合指定的硬連接數目的文件或目錄;

-iname&<範本樣式&>:指定字元串作為尋找符號連接的範本樣式;

-ls:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出;

-maxdepth&<目錄層級&>:設置最大目錄層級;

-mindepth&<目錄層級&>:設置最小目錄層級;

-mmin&<分鐘&>:查找在指定時間曾被更改過的文件或目錄,單位以分鐘計算;

-mount:此參數的效果和指定「-xdev」相同;

-mtime&<24小時數&>:查找在指定時間曾被更改過的文件或目錄,單位以24小時計算;
-name&<範本樣式&>:指定字元串作為尋找文件或目錄的範本樣式;

-newer&<參考文件或目錄&>:查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄;

-nogroup:找出不屬於本地主機群組識別碼的文件或目錄;

-noleaf:不去考慮目錄至少需擁有兩個硬連接存在;

-nouser:找出不屬於本地主機用戶識別碼的文件或目錄;

-ok&<執行指令&>:此參數的效果和指定「-exec」類似,但在執行指令之前會先詢問用戶,若回答「y」或「Y」,則放棄執行命令;

-path&<範本樣式&>:指定字元串作為尋找目錄的範本樣式;

-perm&<許可權數值&>:查找符合指定的許可權數值的文件或目錄;

-print:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有「./」字元串;

-print0:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行;

-printf&<輸出格式&>:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。格式可以自行指定;

-prune:不尋找字元串作為尋找文件或目錄的範本樣式;

-regex&<範本樣式&>:指定字元串作為尋找文件或目錄的範本樣式;

-size&<文件大小&>:查找符合指定的文件大小的文件;

-true:將find指令的回傳值皆設為True;

-typ&<文件類型&>:只尋找符合指定的文件類型的文件;

-uid&<用戶識別碼&>:查找符合指定的用戶識別碼的文件或目錄;

-used&<日數&>:查找文件或目錄被更改之後在指定時間曾被存取過的文件或目錄,單位以日計算;

-user&<擁有者名稱&>:查找符和指定的擁有者名稱的文件或目錄;

-version或——version:顯示版本信息;

-xdev:將範圍局限在先行的文件系統中;

-xtype&<文件類型&>:此參數的效果和指定「-type」參數類似,差別在於它針對符號連接檢查。

參數

起始目錄:查找文件的起始目錄。

實例

根據文件或者正則表達式進行匹配

列出當前目錄及子目錄下所有文件和文件夾

find .


在/home目錄下查找以.txt結尾的文件名

find /home -name "*.txt"

同上,但忽略大小寫

find /home -iname "*.txt"

當前目錄及子目錄下查找所有以.txt和.pdf結尾的文件

find . ( -name "*.txt" -o -name "*.pdf" )

find . -name "*.txt" -o -name "*.pdf"

匹配文件路徑或者文件

find /usr/ -path "*local*"

基於正則表達式匹配文件路徑

find . -regex ".*(.txt|.pdf)$"

同上,但忽略大小寫

find . -iregex ".*(.txt|.pdf)$"

否定參數

找出/home下不是以.txt結尾的文件

find /home ! -name "*.txt"

根據文件類型進行搜索

find .

-type 類型參數

類型參數列表:

f 普通文件

l 符號連接

d 目錄

c 字元設備

b 塊設備

s 套接字

p Fifo

基於目錄深度搜索

向下最大深度限制為3

find . -maxdepth 3 -type f

搜索出深度距離當前目錄至少2個子目錄的所有文件

find . -mindepth 2 -type f

根據文件時間戳進行搜索

find . -type f 時間戳

UNIX/Linux文件系統每個文件都有三種時間戳:

訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。

修改時間(-mtime/天,-mmin/分鐘):文件最後一次修改時間。

變化時間(-ctime/天,-cmin/分鐘):文件數據元(例如許可權等)最後一次修改時間。

搜索最近七天內被訪問過的所有文件

find . -type f -atime -7

搜索恰好在七天前被訪問過的所有文件

find . -type f -atime 7

搜索超過七天內被訪問過的所有文件

find . -type f -atime +7

搜索訪問時間超過10分鐘的所有文件

find . -type f -amin +10

找出比file.log修改時間更長的所有文件

find . -type f -newer file.log

根據文件大小進行匹配

find . -type f -size 文件大小單元

文件大小單元:

b —— 塊(512位元組)

c —— 位元組

w —— 字(2位元組)

k —— 千位元組

M —— 兆位元組

G —— 吉位元組

搜索大於10KB的文件


find . -type f -size +10k

搜索小於10KB的文件

find . -type f -size -10k

搜索等於10KB的文件


find . -type f -size 10k

刪除匹配文件

刪除當前目錄下所有.txt文件

find . -type f -name "*.txt" -delete

根據文件許可權/所有權進行匹配

當前目錄下搜索出許可權為777的文件

find . -type f -perm 777

找出當前目錄下許可權不是644的php文件

find . -type f -name "*.php" ! -perm 644

找出當前目錄用戶tom擁有的所有文件

find . -type f -user tom

找出當前目錄用戶組sunk擁有的所有文件

find . -type f -group sunk

藉助-exec選項與其他命令結合使用

找出當前目錄下所有root的文件,並把所有權更改為用戶tom


find .-type f -user root -exec chown tom {} ;

上例中,{} 用於與-exec選項結合使用來匹配所有文件,然後會被替換為相應的文件名。

找出自己家目錄下所有的.txt文件並刪除

find $HOME/. -name "*.txt" -ok rm {} ;

上例中,-ok和-exec行為一樣,不過它會給出提示,是否執行相應的操作。

查找當前目錄下所有.txt文件並把他們拼接起來寫入到all.txt文件中

find . -type f -name "*.txt" -exec cat {} ;&> all.txt

將30天前的.log文件移動到old目錄中

find . -type f -mtime +30 -name "*.log" -exec cp {} old ;

找出當前目錄下所有.txt文件並以「File:文件名」的形式列印出來

find . -type f -name "*.txt" -exec printf "File: %s
" {} ;

因為單行命令中-exec參數中無法使用多個命令,以下方法可以實現在-exec之後接受多條命令

-exec ./text.sh {} ;

搜索但跳出指定的目錄

查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk

find . -path "./sk" -prune -o -name "*.txt" -print

find其他技巧收集

要列出所有長度為零的文件

find . -empty


find ./ -name {FILE_NAME}

google一下都不會?


find /web/app | grep filename


推薦閱讀:

如何一步步學習開發伺服器(nginx)?

TAG:操作系統 | Linux | ApacheTomcat | Linux開發 | Web伺服器 |