การใช้ค้นหาเพื่อค้นหาไดเรกทอรี


20

ฉันใช้ค้นหาตลอดเวลาเพื่อค้นหาไฟล์ที่ฉันรู้ชื่อค้นหาเร็วมากและฉันก็ชอบ สำหรับการค้นหาไฟล์ที่สร้างขึ้นเมื่อเร็ว ๆ นี้พบว่ายอดเยี่ยมมากโดยปกติแล้วด้วยไฟล์ที่สร้างขึ้นเมื่อเร็ว ๆ นี้ฉันรู้ว่าไฟล์เหล่านั้นถูกสร้างขึ้นที่ไหนฉันจึงไม่ต้องค้นหาระบบไฟล์ทั้งหมดของฉัน

เมื่อฉันลืมตำแหน่งของไดเรกทอรี แต่ไม่พบหรือค้นหาดูเหมือนจะเหมาะ

ค้นหาจะคายข้อมูลมากเกินไปเพราะทุก ๆ ไฟล์ในไดเรกทอรีนั้นตรงกับตำแหน่ง ตัวอย่างเช่นถ้าฉันค้นหาไดเรกทอรีชื่อบันทึกที่ไหนสักแห่งในระบบไฟล์ของฉันค้นหาบันทึกจะส่งกลับผลลัพธ์ตันและตัน ถ้าฉันทำสิ่งเดียวกันกับ find ให้ค้นหา / -name log -type d find ใช้เวลาในการรันและแยกข้อผิดพลาดการอนุญาตทุกประเภททุกครั้งที่พบโฟลเดอร์ที่ไม่สามารถอ่านได้

มีวิธีที่ดีกว่า?

คำตอบ: ดังนั้นฉันจึงติดกับ grep จนกว่าฉันจะหาสิ่งอื่น:

locatedir () {
    for last; do true; done
    if [[ $last == *\/* ]]
    then
        locate $@ | grep "${last}\$"
    else
        locate $@ | grep "/${last}\$"
    fi
}

คำตอบ:


12

วิธีหนึ่ง (ฉันสงสัยว่าอาจเป็นวิธีที่ดีกว่า) คือการใช้ grep เพื่อส่งกลับเฉพาะเส้นทางเหล่านั้นที่ลงท้ายด้วยชื่อโฟลเดอร์ของคุณ:

locate foldername | grep /foldername$

28

คุณสามารถใช้ตัวเลือก--regex( -r) ของlocate:

locate -r '/log$'

ใช่ (+1) locateมีความสามารถในการ regex ของตัวเอง: -rหรือ--regex... สำหรับตัวเลือกอย่างเต็มรูปแบบดู: info
find

1
ฉันรู้ว่าต้องมีวิธีที่ดีกว่า!
มิสเตอร์เบ็น

สั้นและทำงานได้อย่างราบรื่น ผลงานยอดเยี่ยม! อีกเหตุผลหนึ่งในการเรียนรู้ / ฝึกฝนการแสดงออกปกติ
รัก

คุณไม่จำเป็นต้องใช้ทั้งสอง'กรณีนี้locate -r /log$ก็เพียงพอแล้ว
simlev

5

คุณเคยลองไหม:

locate /home/insertusernamehere/*/filename?

หรือ

locate file | grep -i '^/home/.*/examplesubdirectory'?

หรือการเปลี่ยนแปลงใด ๆ ของเช่น?


คำตอบนี้แสดงให้เห็นว่าgrepไม่จำเป็นและอย่างที่เห็นในตัวเลือกแรกที่แนะนำไม่ได้เป็น regexps
ทอม

2

นี่มันคือ

locatedir () {
    locate "$*" | while read line
    do 
    if [ -d "$line" ] ; then echo $line ; fi
    done
}

locatedir $*

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