ค้นหาชื่อแฟ้มที่ปฏิบัติการได้โดยไม่มีเส้นทาง


9

ฉันมีโฟลเดอร์ที่มีไฟล์เรียกทำงานจำนวนมากและฉันต้องการละเว้นพา ธ ในผลลัพธ์ของคำสั่ง find คำสั่งนี้แสดงไฟล์ที่ฉันต้องการดู แต่มันก็แสดงเส้นทาง ฉันแค่ต้องการชื่อไฟล์

find /opt/g09 -maxdepth 1 -executable

ฉันจะได้รับผลลัพธ์ของการค้นหาเพื่อแสดงเฉพาะชื่อไฟล์ได้อย่างไรไม่ใช่เส้นทางแบบเต็ม

คำตอบ:


10

หรือใช้:

find /opt/g09 -maxdepth 1 -executable -printf "%f\n"

การเพิ่ม-type fค่าสถานะยังใช้งานได้ที่นี่

จากfindคู่มือ:

 %f     File's name with any leading directories removed (only the last element).

คำตอบนี้ต้องการเพียงแค่คุณมี GNU findในขณะที่คนอื่นต้องการโปรแกรมอื่นเพื่อจัดการกับผลลัพธ์ของคุณ


- ประเภทของสิ่งที่ฉันพยายามคิด! ขอบคุณคนที่เข้ารหัส!
j0h

@ j0h ไม่ใช่ปัญหา!
nixpower

6

การใช้basename:

find /opt/g09 -maxdepth 1 -executable -exec basename {} \;

จากman basename:

Print NAME with any leading directory components removed.

นอกจากนี้คุณกำลังพยายามfindทุกอย่างเพื่อ จำกัด การค้นหาของคุณเป็นไฟล์เท่านั้นให้ใช้:

find /opt/g09 -type f -maxdepth 1 -executable -exec basename {} \;

3

ทางออกที่ชัดเจนที่สุดสำหรับฉันคือ

(cd /opt/g09; find -maxdepth 1 -executable)

เนื่องจากคุณเริ่ม subshell คุณยังคงอยู่ในไดเรกทอรีเดียวกัน ข้อดีของวิธีนี้คือคุณไม่จำเป็นต้องแยกวิเคราะห์ ข้อเสียคือคุณเริ่ม subshell (คุณจะไม่รู้สึกเช่นนั้น)


1
มันเป็นความคิดที่ฉลาด
AB

1

ด้วยการawkแบ่งเส้นทางโดยตัวคั่น/ให้พิมพ์ส่วนสุดท้าย ( $NF):

find /opt/g09 -maxdepth 1 -executable | awk -F/ '{print $NF}'

รุ่นไพ ธ อนของคุณอยู่ที่ไหน ;)
Sergiy Kolodyazhnyy

@Serg ฮ่า ๆ ผมต้องผูกมือของฉัน :)
จาค็อบ Vlijm

1

ใช้การรวมกันของfindและperl

find /opt/g09 -maxdepth 1 -type f -executable | perl -pe 's/.+\/(.*)$/\1/'

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