ฉันต้องการค้นหาไฟล์ทั้งหมดที่มีนามสกุล. sql ในโฟลเดอร์และโฟลเดอร์ย่อย (เรียกซ้ำ)
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการค้นหาไฟล์ทั้งหมดที่มีนามสกุล. sql ในโฟลเดอร์และโฟลเดอร์ย่อย (เรียกซ้ำ)
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
หรือ...
find $directory_name -name \*.sql
ตัวอย่างเช่น
find / -name \*.sql
หรือ
find ~ \*.sql
(โดยที่ ~ หมายถึง / home / your_username /) หรือ ...
find /usr/local/share/ \*.sql
และอื่น ๆ
รันสิ่งนี้ในบรรทัดคำสั่ง:
cd / && find | grep '\.sql$'
เปลี่ยน '/' เป็นไดเรกทอรีที่คุณต้องการค้นหา
findคำสั่งสามารถทํางานได้โดยไม่ต้อง grep (โดยใช้ตัวเลือกพิเศษ) แต่ผมพบว่าการใช้งานดังกล่าวข้างต้นที่สะดวกมากขึ้น
ตามคำสั่งข้างต้น:
cd / )find )| grep '\.sql$')findได้กรองความสามารถไปแล้ว
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันใหม่สวยที่นี้และฉันได้พบวิธีที่ง่ายในการค้นหาไฟล์ทั้งหมดของนามสกุลที่แน่นอนในไดเรกทอรีและไดเรกทอรีย่อยของเด็ก ๆ ก่อนอื่นคุณต้องไปที่ไฟล์parent Directoryนั้นfind . -name '*.sql'และคุณจะพบไฟล์ทั้งหมดที่มีนามสกุล. sqlในไดเรกทอรีและไดเรกทอรีย่อย
ในกรณีของฉันฉันต้องการลบไฟล์. xmlทั้งหมดในไดเรกทอรีและไดเรกทอรีย่อยดังนั้นสิ่งที่ฉันทำเพิ่มเติมคือฉันได้เพิ่มการลบดังที่นี่find . -name '*.xml' | xargs rm
หวังว่าจะช่วยคนนี้ :)
findเข้าใจ-deleteคำสั่ง rmไม่จำเป็นต้องเกี่ยวข้องกับ หรือคุณสามารถใช้คำสั่งเพื่อเรียกได้โดยตรงโดยไม่ต้องอ้อมผ่านท่อและ-exec xargs
locate -br \\.sql$ | egrep '^/folder/path/'
หากยังไม่ได้ติดตั้งให้ติดตั้งก่อนหน้านี้ด้วย:
sudo apt install mlocate
mlocate.dbอินสแตนซ์ที่ทันสมัยซึ่งไม่ได้ตั้งค่าไว้ใน Ubuntu (ฉัน blieve) นอกจากนี้ทำไมไม่ง่าย ๆlocate '/folder/path/*.sql'?
locateมีการตั้งค่าที่แตกต่างจาก regex ที่ใช้ในegrep
locateจับคู่นิพจน์ glob เหมือน/folder/path/*.sqlไม่ใช่นิพจน์ทั่วไป
man locateฉันได้รับ-r, --regexp REGEXP - Search for a basic regexp REGEXPดังนั้นฉันคิดว่ามันเป็น regex อย่างไรก็ตามฉันลองใช้ "การแสดงออกทั่วโลก" ของคุณ แต่ไม่ได้ผลฉันขอโทษ
--regexไม่ได้ระบุไว้PATTERNs สามารถมีตัวละครกลมตัว" ( แหล่งที่มา )