ค้นหาไฟล์ทั้งหมดที่มีนามสกุล. sql ในโฟลเดอร์และโฟลเดอร์ย่อย


17

ฉันต้องการค้นหาไฟล์ทั้งหมดที่มีนามสกุล. sql ในโฟลเดอร์และโฟลเดอร์ย่อย (เรียกซ้ำ)

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


29

หรือ...

find $directory_name -name \*.sql

ตัวอย่างเช่น

find / -name \*.sql

หรือ

find ~ \*.sql

(โดยที่ ~ หมายถึง / home / your_username /) หรือ ...

find /usr/local/share/ \*.sql

และอื่น ๆ


2

รันสิ่งนี้ในบรรทัดคำสั่ง:

cd / && find | grep '\.sql$'

เปลี่ยน '/' เป็นไดเรกทอรีที่คุณต้องการค้นหา

findคำสั่งสามารถทํางานได้โดยไม่ต้อง grep (โดยใช้ตัวเลือกพิเศษ) แต่ผมพบว่าการใช้งานดังกล่าวข้างต้นที่สะดวกมากขึ้น

ตามคำสั่งข้างต้น:

  1. เปลี่ยนไดเร็กทอรีปัจจุบันเป็นไดเร็กทอรีรูท (cd / )
  2. แสดงรายการไฟล์และไดเรกทอรีทั้งหมดที่และด้านล่างไดเรกทอรีปัจจุบัน (find )
  3. กรองไฟล์และไดเรกทอรีสำหรับสิ่งที่ลงท้ายด้วย '.sql' ( | grep '\.sql$')

ขอบคุณคุณช่วยอธิบายได้ไหม ใช้ grep ของคุณและส่งออกไปหา?
Blankman

ในทางกลับกันที่จริงแล้ว ฉันใช้การค้นหาและส่งผ่านผลลัพธ์ไปยัง grep ฉันเพิ่มคำอธิบายโดยละเอียดเพิ่มเติมด้านบน
Barbarrosa

จะใช้งานกับ Mac ได้หรือไม่ ฉันพยายาม 'ค้นหา | grep '\ .sql $' และแสดงผลลัพธ์ข้อมูลช่วยเหลือการใช้งาน
Blankman

find เป็นเครื่องมือที่ทรงพลังและคุณไม่จำเป็นต้องใช้ท่อส่งออกเป็น grep นี่คือลิงค์ที่ดี - content.hccfl.edu/pollock/unix/findcmd.htm
Panther

1
findได้กรองความสามารถไปแล้ว
enzotib

1

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันใหม่สวยที่นี้และฉันได้พบวิธีที่ง่ายในการค้นหาไฟล์ทั้งหมดของนามสกุลที่แน่นอนในไดเรกทอรีและไดเรกทอรีย่อยของเด็ก ๆ ก่อนอื่นคุณต้องไปที่ไฟล์parent Directoryนั้นfind . -name '*.sql'และคุณจะพบไฟล์ทั้งหมดที่มีนามสกุล. sqlในไดเรกทอรีและไดเรกทอรีย่อย

ในกรณีของฉันฉันต้องการลบไฟล์. xmlทั้งหมดในไดเรกทอรีและไดเรกทอรีย่อยดังนั้นสิ่งที่ฉันทำเพิ่มเติมคือฉันได้เพิ่มการลบดังที่นี่find . -name '*.xml' | xargs rm

หวังว่าจะช่วยคนนี้ :)


2
findเข้าใจ-deleteคำสั่ง rmไม่จำเป็นต้องเกี่ยวข้องกับ หรือคุณสามารถใช้คำสั่งเพื่อเรียกได้โดยตรงโดยไม่ต้องอ้อมผ่านท่อและ-exec xargs
David Foerster

0
locate -br \\.sql$ | egrep '^/folder/path/'

หากยังไม่ได้ติดตั้งให้ติดตั้งก่อนหน้านี้ด้วย:

sudo apt install mlocate

สิ่งนี้ต้องการmlocate.dbอินสแตนซ์ที่ทันสมัยซึ่งไม่ได้ตั้งค่าไว้ใน Ubuntu (ฉัน blieve) นอกจากนี้ทำไมไม่ง่าย ๆlocate '/folder/path/*.sql'?
David Foerster

@DavidFoersterI ฉันพยายามตามที่คุณระบุ แต่มันใช้งานไม่ได้ฉันคิดว่า regex locateมีการตั้งค่าที่แตกต่างจาก regex ที่ใช้ในegrep
Vzzarr

locateจับคู่นิพจน์ glob เหมือน/folder/path/*.sqlไม่ใช่นิพจน์ทั่วไป
David Foerster

ขอโทษ แต่จากที่man locateฉันได้รับ-r, --regexp REGEXP - Search for a basic regexp REGEXPดังนั้นฉันคิดว่ามันเป็น regex อย่างไรก็ตามฉันลองใช้ "การแสดงออกทั่วโลก" ของคุณ แต่ไม่ได้ผลฉันขอโทษ
Vzzarr

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