2017-06-15 58 views
0

所以我需要找到/ home /文件名爲「options.php」的所有文件。如何在特定目錄名稱中找到文件?

find . -name "options.php" 

當「家庭」,那會發現所有options.php文件,但是,我只想找到所有options.php文件時,他們在/的public_html /。 換句話說,它應該忽略所有其他'options.php'文件。 例如,正/顯示的結果:

/home/usr1/public_html/options.php 
/home/usr2/public_html/options.php 

例如,不應該告訴我:

/home/usr1/public_html/wp-admin/options.php 
/home/usr2/public_html/wp-content/plugins/whatever/options.php 
+0

安裝此https://github.com/Avinash-Raj/pls然後運行cd/home/usr1/public_html&pls'options.php'' –

+0

Stack Overflow是一個用於編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈關於Dev Ops的問題?](http://meta.stackexchange.com/q/134306) – jww

回答

1

可以按如下方式通過-path選項傳遞圖案。但是,在這種特殊情況下-regex沒有優勢-path

find /home/ -regex '.*/public_html/options.php' 
0

ls實用程序是這個任務更適合:

ls -1 /home/*/public_html/options.php 

如果你想處理結果列表並做不是想要有錯誤信息或警告,如果沒有找到這樣的文件,那麼只需重新導入CT命令的錯誤輸出:

ls -1 /home/*/public_html/options.php 2>/dev/null 

使用find實用另一種方法是:

find /home -path "*/public_html/options.php" 

或者,如果你要防止在所謂的「的public_html」文件夾的比賽進一步下降在層次結構中:

find /home -path "/home/*/public_html/options.php" 
find /home -maxdepth 3 -path "*/public_html/options.php" 
+0

/bin/ls:無法訪問/home/*/public_html/options.php:沒有這樣的文件或目錄 – SupaMonkey

+0

@SupaMonkey這很奇怪,我不會得到那個響應,_except_顯然如果實際上沒有這樣的文件...也許你想重定向錯誤輸出? – arkascha

1

使用從找到的結果中篩選所需的結果。

find /home/ -path '*/public_html/options.php' 

對於更靈活圖案使用-regex它接受施加在整個路徑上的正則表達式:

find . -name "options.php" | grep 'public_html/options.php' 
+0

感謝您的回答。雖然正確 - 上面的Ruslan的選擇要快得多。 – SupaMonkey

+0

不客氣。 – zhenguoli

+0

這也會找到名爲「public_html」的文件夾中的匹配項...... – arkascha

0

您可以限制發現的深度: find . -maxdepth N,這樣它應該只在您需要的文件夾中找到options.php。

相關問題