จะค้นหาพา ธ ของไฟล์ตามชื่อไฟล์ได้อย่างไร?


22

ฉันพยายามค้นหาsettings.xmlไฟล์ในเครื่อง Ubuntu ของฉัน ฉันไม่รู้ว่ามันอยู่ที่ไหนและอยู่ในไดเรกทอรีไหน

ฉันลองใช้มัน -

ls -R | grep settings.xml

แต่มันไม่ได้แสดงเส้นทางแบบเต็มให้ฉันเห็น .. มีคำสั่งอื่นอีกไหมที่ฉันต้องลองซึ่งสามารถให้เส้นทางแบบเต็มกับฉันได้หรือไม่


4
เมื่อใดก็ตามที่คุณคิดแก้ปัญหาคือการแยกการส่งออกของlsคุณจะเกือบแน่นอนทำมันผิดวิธี
terdon

คำตอบ:


23

สำหรับการค้นหาที่รวดเร็ว (แต่ไม่ชัดเจน):

locate -br '^settings.xml$'

จากman locate:

   locate  reads  one or more databases prepared by updatedb(8) and writes
   file names matching at least one of the PATTERNs  to  standard  output,
   one per line.

   -b, --basename
          Match  only  the base name against the specified patterns.  This
          is the opposite of --wholename.
   -r, --regexp REGEXP
          Search for a basic regexp REGEXP.  No PATTERNs  are  allowed  if
          this  option  is used, but this option can be specified multiple
          times.

^และ$ให้แน่ใจว่าเฉพาะไฟล์ที่มีชื่อเป็นsettings.xmlและไม่ได้ไฟล์ที่มีชื่อประกอบด้วย settings.xmlจะถูกพิมพ์

คุณอาจต้องเป็นครั้งแรกที่จะวิ่ง: updatedb(เป็นroot) เพื่อปรับปรุง / locateสร้างฐานข้อมูลของ


@terdon คุณทำให้ฉันประหลาดใจฉันไม่เคยคิดถึงเรื่องนี้มาman locateก่อนเลย !!! สมมติว่าเป็นเครื่องมือค้นหาอย่างง่าย ขอบคุณมาก.
user.dz

ใช่นั่นเป็นปฏิกิริยาของฉันในครั้งแรกที่ฉันอ่าน man page :)
terdon

4
เป็นมูลค่า noting บทบาทของupdatedbคำสั่งนี้ - locateมักจะล้มเหลวโดยไม่ว่าสำหรับฉัน anyways
rm-vanda

@ rm-vanda ฉันได้อัปเดตคำตอบที่กล่าวถึงupdatedbแล้ว ขอขอบคุณ.
user.dz

4
locate '*/settings.xml'อาจเป็นแบบพกพามากกว่าในการใช้งานที่แตกต่างหลากหลายของlocate(ถ้ามี)
Stéphane Chazelas

15

การค้นหาที่ช้า แต่มั่นคงผ่านระบบไฟล์ แต่แตกต่าง

find / -xdev -name settings.xml

จะใช้เวลาสักครู่และคุณอาจได้รับข้อผิดพลาดในการขออนุญาต แต่จะไปถึงที่นั่น หากคุณมีความคิดเพิ่มเติมเกี่ยวกับตำแหน่งที่อาจเปลี่ยนไดเรกทอรีแรกจาก/เป็น/where/you/guess


4
ผนวก2>/dev/nullกับจุดสิ้นสุดของคำสั่งที่จะปราบปรามทั้งหมดของการส่งออกข้อผิดพลาด (โดยเปลี่ยนเส้นทาง stderr ไปยังอุปกรณ์โมฆะ)
แทนเนอร์ Swett

2
-xdev: ห้ามสืบทอดไดเร็กทอรีบนระบบไฟล์อื่น
Pablo A


0

ต้นไม้เป็นอีกวิธีที่ดีถ้าคุณไม่แน่ใจว่าสิ่งที่คุณกำลังมองหาและดูเหมือนว่าจะเร็วขึ้น -:

tree -f / | grep settings.xml

ค่าสถานะที่มีประโยชน์อื่น ๆ : -iบน grep จะไม่สนใจตัวอักษรที่ -hมนุษย์อ่านได้บนต้นไม้ -

- หน้าคนมีตัวเลือกที่มีประโยชน์มากมาย -!


6
ไม่ได้เป็นความคิดที่ดีtree(1)ที่แสดงให้เห็นต้นไม้ ASCII grep(1)ศิลปะของไฟล์ซึ่งจะทำให้เสียหายแล้วโดย
vonbrand

1
ใช่ถ้าคุณจะใช้treeคุณก็อาจใช้find . type -fซึ่งจะเร็วขึ้น
terdon

0

พารามิเตอร์ -la พิมพ์ ls และไดเร็กทอรีแบบยาวเช่นกัน ls -la | grep settings.xml


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