วิธีการค้นหาไดเรกทอรีบน linux?


453

ฉันมี VPS กับSUSE Linux 10.3

ฉันเข้าสู่ระบบผ่านทางSSH / puttyและฉันพยายามค้นหาที่ไฟล์เว็บของฉันอยู่

เนื่องจากฉันกำลังอัปโหลดผ่าน FTP ในไดเรกทอรีที่ชื่อว่าhttpdocsฉันคิดว่าไดเรกทอรีนี้มีอยู่ที่ใดที่หนึ่ง

การค้นหา google ของฉันสอนให้ฉันทำสิ่งนี้ไปที่ไดเรกทอรีรากและพิมพ์:

find httpdocs -type d

แต่มันบอกว่า " ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว "

ฉันจะหาไดเรกทอรีนี้ได้อย่างไร


4
ในกรณีที่มีคนสงสัยคำสั่งในคำถามจะค้นหาไดเรกทอรีทั้งหมด ( -type d) ในรายการไดเรกทอรีhttpdocs(สัมพันธ์กับไดเรกทอรีการทำงานปัจจุบันโดยปกติ แต่ไม่จำเป็นต้องเป็นไดเรกทอรี) มันล้มเหลวด้วยข้อผิดพลาดเนื่องจากไม่มีรายการไดเรกทอรีhttpdocsในไดเรกทอรีรากของระบบและดังนั้นจึงไม่มีจุดเริ่มต้นสำหรับการค้นหา
Daniel Beck

คำตอบ:


609

มันคือ:

find / -type d -name 'httpdocs'

พารามิเตอร์แรก "/" เป็นที่ที่ควรมองหาในกรณีนี้ "/" เป็นระบบทั้งหมด

-name อาจเป็น -iname เพื่อละเว้นกรณีและปัญหา

ยังพิมพ์ไม่ได้บังคับ

ใช้: คนค้นหาตัวเลือกเพิ่มเติม


2
find / -name 'httpdocs' นั้นใช้งานได้ดีมากขอบคุณ
Edward Tanguay

91
มันอาจไม่สำคัญสำหรับการค้นหาแบบง่าย ๆ แต่สำหรับคำสั่งการค้นหาที่ซับซ้อนมากขึ้นมันก็คุ้มค่าที่จะสังเกตว่าสิ่งต่าง ๆ ได้รับการประเมินตามลำดับที่อยู่ใน commandline ดังนั้นคุณอาจต้องการที่จะมี -type d (ไดเรกทอรีเท่านั้น) ก่อน -name เพื่อเร่งสิ่งต่างๆ อีกครั้งสิ่งนี้อาจไม่สำคัญมากนักที่นี่ แต่เมื่อทำการค้นหาที่ซับซ้อนมากขึ้นมันสามารถปรับปรุงความเร็วในการค้นหาได้อย่างมาก
Dominic Eidson

14
ที่จริงแล้วการ-nameทดสอบนั้นเร็วกว่าการทดสอบอื่น ๆ ส่วนใหญ่เนื่องจาก-nameตรงกับรายชื่อของไดเรกทอรีซึ่งโหลดจากดิสก์แล้วและการทดสอบอื่น ๆ จำเป็นต้องดำเนินการ a stat(2)เพื่อรับข้อมูลไฟล์ หลังจากการstat()เรียกไฟล์ครั้งแรกการทดสอบที่ตามมาจะได้รับจากหน่วยความจำเช่น: -type f -mtime -10.
Arcege

24
หากคุณกำลังจะทำการค้นหาบนระบบไฟล์ทั้งหมดโดยเฉพาะอย่างยิ่งเซิร์ฟเวอร์ก็มักจะดีที่จะใช้niceเพื่อให้การค้นหาไม่ได้ใช้ทรัพยากรมากเกินไปจากกระบวนการที่สำคัญยิ่งกว่า:nice find / ...
Arcege

16
ฉันจะผนวก 2> / dev / null เพื่อหลีกเลี่ยงการซ่อนผลการค้นหาในข้อผิดพลาดการอนุญาตทั้งหมด
Jason Yeo

63

คำสั่งนี้จะให้สิ่งที่คุณต้องการ:

find / -type d -name httpdocs

ที่จะค้นหาจากรูทของเซิร์ฟเวอร์ของคุณเพื่อหาไดเรกทอรีที่มีชื่อ httpdocs หรือหากคุณต้องการค้นหาจากไดเรกทอรีปัจจุบันให้แทนที่ '/' ด้วย '

คำสั่งอื่นที่คุณสามารถลองใช้คือค้นหาว่าคุณต้องการทำสิ่งใด:

locate httpdocs

ค้นหา httpdocs บอกฉัน "ค้นหา: คำสั่งไม่พบ"
เอ็ดเวิร์ด Tanguay

4
สำหรับผู้ที่ใช้คำสั่ง "ค้นหา" (ระบุว่ามีอยู่ในระบบของคุณ) ตรวจสอบให้แน่ใจว่าฐานข้อมูลที่ค้นหานั้นเป็นข้อมูลล่าสุด โดยปกติงาน cron บางอย่างจะดูแลมัน มิฉะนั้นเรียกใช้ "updatedb" (เป็น root) จากนั้นเรียกใช้ "ค้นหา <somefile>" ที่คุณต้องการ นี่เป็นสิ่งจำเป็นสำหรับการค้นหาไฟล์ / dirs ที่เพิ่มล่าสุด
David Ramirez

+1 สำหรับการค้นหา มันเร็วกว่ามากแต่ก็ต่อเมื่อดัชนีนั้นทันสมัย โชคดีที่บางสิ่งเช่น "httpdocs" จะไม่เปลี่ยนตำแหน่งบ่อยๆ หากคุณวางแผนที่จะค้นหาไฟล์บนเครื่องซ้ำ ๆ คุณต้องใช้เวลาสองสามนาทีในการตั้งค่างานที่อัพเดทแล้ว
Doug Harris

1
ในหลายกรณีการค้นหาจะส่งคืนผลลัพธ์มากเกินไปเนื่องจากไฟล์ 100k ทั้งหมดในไดเรกทอรีนั้นจะปรากฏขึ้น ในกรณีนี้หากผู้ใช้ทุกคนมี httpdocs ของตนเองที่มี 100 หรือ 1,000 ไฟล์ผลที่ต้องการ OP อาจจะหายไป
Jistanidiot

+1 สำหรับการค้นหา ... ฉันอัปเดตฐานข้อมูลของฉันอยู่ดังนั้นคำสั่งนี้มีประโยชน์มาก ...
nicorellius

27
find / -type d -name httpdocs 2> /dev/null

สิ่งนี้จะกำจัดข้อความแสดงข้อผิดพลาดทั้งหมดที่คุณน่าจะได้รับ (อ่านเสมอ) เมื่อไม่ได้ทำสิ่งนี้ในฐานะผู้ใช้รูท อยากจะแนะนำให้ทำแบบนี้


2
2> /dev/nullตัวเลือกที่เป็นประโยชน์มาก ไม่อย่างนั้นมันอาจเป็นเรื่องยากที่จะเห็นผลลัพธ์ที่ต้องการ ...
Gottlieb Notschnabel


13

สิ่งสำคัญคือต้องรู้พารามิเตอร์ - ชื่อเพื่อค้นหารูปแบบ "case insensitive" และการใช้อักขระตัวแทน: *,?, ฯลฯ

สองตัวอย่าง:

ค้นหาไฟล์ทั้งหมดจาก / root ที่มีสตริง "Linux", ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่:

find  /root -type f -iname "*linux*"

ค้นหาไดเรกทอรีทั้งหมดจาก / root ที่มีสตริง "Linux", ไม่คำนึงถึงขนาดตัวพิมพ์:

find  /root -type d -iname "*linux*"

สกัดจากที่นี่:

http://www.sysadmit.com/2015/12/linux-buscar-ficheros-directorios-con-find.html


คำถามนี้เกี่ยวกับวิธีการค้นหาไดเรกทอรีที่มีชื่อที่คุณรู้จักไม่ใช่วิธีการค้นหาไดเรกทอรีที่มีชื่อที่คุณรู้จัก (โดยประมาณ) นอกจากนี้คำตอบที่ได้รับการยอมรับ (จากมากกว่า 6 ปีที่ผ่านมา!) แล้วกล่าวเป็นทางเลือกกรณีตายไป-iname -name
G-Man

9

คุณเกือบจะได้มัน ไวยากรณ์ที่ถูกต้องจะเป็น:

find / -type d -name httpdocs

ไดเรกทอรีน่าจะอยู่ภายใต้ /var/www/


ที่บอกฉัน "เส้นทางที่ต้องนำหน้านิพจน์"
เอ็ดเวิร์ด Tanguay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.