คำสั่ง Linux: ค้นหาไฟล์และเรียกใช้คำสั่งเหล่านั้น


16

ฉันจะจัดการค้นหาไฟล์ทั้งหมดในไดเรกทอรีและไดเรกทอรีย่อยและเรียกใช้คำสั่งได้อย่างไร

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

find . -type f -name "*.txt" 

ค้นหาไฟล์ txt ทั้งหมดและ:

find . -type f -name "*.txt" | gedit

ส่งไปที่ gedit แต่อยู่ในไฟล์ข้อความ ฉันต้องการ gedit เพื่อเปิดไฟล์ข้อความทั้งหมด

คำตอบ:


22

คุณสามารถใช้การ-execตั้งค่าสถานะเพื่อดำเนินการคำสั่งในแต่ละไฟล์ที่ตรงกัน:

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

วากยสัมพันธ์

ไวยากรณ์แปลกเล็กน้อย (ดู-exec command ;ใน manpages เพิ่มเติม):

The string `{}' is replaced by the current file name being processed

คุณอาจต้องการพิจารณา-execdirด้วยซึ่งจะทำเช่นเดียวกัน แต่ดำเนินการคำสั่งจากไดเรกทอรีย่อยที่มีไฟล์ที่ตรงกัน (โดยทั่วไปจะดีกว่า)


1
ขอบคุณ ฉันเห็นว่ามันใช้งานได้ แต่ท้ายที่สุด ("{}" \ :) หมายถึงอะไร ดำเนินการรายการหรือไม่

1
{}ยืนอยู่ในชื่อไฟล์ปัจจุบันและอัฒภาคเป็นเพียงการยกเลิกคำสั่ง แบ็กสแลชและเครื่องหมายคำพูดล้อมรอบเป็นเพียงเพื่อป้องกันการขยายตัวของเชลล์
เดวิดคาอิน

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


ขอบคุณ ฉันเห็นว่ามันใช้งานได้ แต่ -print0 | อะไรบ้าง ส่วน xargs -0 หมายถึงอะไร

1
@xyz คุณสามารถอ่านเกี่ยวกับธงของใด ๆคำสั่ง UNIX โดยใช้หน้าคน ลองman findหรือman xargsแล้ว/เพื่อค้นหาธงที่กำหนด เอกสารค่อนข้างดีควรตอบคำถามของคุณ
เดวิดคาอิน

1
-print0พิมพ์อักขระ NULL หลังแต่ละรายการ-0คาดว่ารายการจะคั่นด้วยอักขระ NULL มันเป็นวิธีที่ปลอดภัยที่สุดในการจัดการกับชื่อที่ยุ่งยาก
Notinlist

และไม่ใช่เรื่องแปลกที่ไวยากรณ์ไม่ใช่ gedit xargs -0 แทนที่จะเป็น xargs -0 gedit ฉันเห็นว่าอดีตไม่ทำงาน แต่ล้มเหลวที่จะดูว่าทำไม

3
xargs นั้นดีกว่า -exec ด้วยเหตุผลด้านประสิทธิภาพเนื่องจาก xargs สามารถ "batch up" จำนวนอาร์กิวเมนต์ก่อนที่จะส่งไปยัง gedit หากจำเป็นต้องเรียกใช้ gedit สำหรับแต่ละไฟล์ให้แทนที่ '... -print0 | xargs -0 gedit 'กับ' ... -print0 | xargs -0 -i gedit {} 'xargs เป็นหนึ่งในคำสั่งเหล่านั้นเช่น find และ screen ที่คุณไม่เคยรู้ว่าคุณเข้ากันได้อย่างไรภายในหนึ่งปีหลังจากที่คุณเรียนรู้เกี่ยวกับมัน
arclight
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.