ตามที่ chaps อื่น ๆ ได้กล่าวไปแล้ว xargs คือเพื่อนของคุณ มันเป็นเครื่องมือที่ทรงพลังจริงๆและฉันจะพยายามอธิบายและให้วิธีแก้ปัญหาสำหรับ gotcha ทั่วไป
สิ่งที่ xargs ทำคือนำบรรทัดจากอินพุตและผนวกเข้ากับคำสั่งอื่นดำเนินการคำสั่งอื่นสำหรับทุกบรรทัดในอินพุต ดังนั้นโดยการพิมพ์locate foobar | xargs rm -f
, ผลลัพธ์ของคำสั่งค้นหาจะได้รับการติดตั้งบนท้ายของคำสั่งและดำเนินการสำหรับแต่ละสายการผลิตโดยrm -f
locate foobar
The gotcha:
แต่จะเกิดอะไรขึ้นถ้ามีช่องว่างในบรรทัดของคุณส่งคืนโดยการค้นหา ที่จะทำลายrm -f
คำสั่งเพราะข้อโต้แย้งที่ส่งผ่านไปยัง RM จะต้องเป็นไฟล์ (เว้นแต่คุณจะใช้สวิตช์ -r) และเส้นทางไฟล์จะต้องมีการหลบหนีหรือยกมาถ้ามีช่องว่าง
xargs จัดเตรียมสวิตช์ -i เพื่อแทนที่อินพุตลงในคำสั่งที่ตามมาแทนการต่อท้าย ดังนั้นฉันจะเปลี่ยนคำแนะนำเป็น
locate foobar | xargs -ixxx rm -f 'xxx'
ซึ่งตอนนี้จะแตกก็ต่อเมื่อชื่อไฟล์ที่ส่งคืนโดยค้นหา apostrophes มีอยู่
ฉันต้องเห็นด้วยกับ qbi ว่าคุณควรระวังเกี่ยวกับการใช้ rm -f ! ใช้แฟล็ก -p เพื่อ xargs หรือเพียงรันการค้นหา foobar ด้วยตัวเองก่อนป้อนไปยัง xargs หรือปล่อย -f จาก rm
locate foobar | xargs -p -ixxx rm -f 'xxx'
rm -i
ค้นหา fooBar``