ฉันพยายามที่จะgrepส่งออกท่อไปrmแต่มันก็ส่งผลสิ่งที่ไร้ประโยชน์ จำเป็นต้องมีสวิตช์rmหรือไม่ หรือสามารถrmให้ regexp โดยตรงได้หรือไม่
ls | grep '^\[Daruchini'| rm
rm: ตัวถูกดำเนินการที่หายไปลองใช้ `rm - ช่วย 'สำหรับข้อมูลเพิ่มเติม
ฉันพยายามที่จะgrepส่งออกท่อไปrmแต่มันก็ส่งผลสิ่งที่ไร้ประโยชน์ จำเป็นต้องมีสวิตช์rmหรือไม่ หรือสามารถrmให้ regexp โดยตรงได้หรือไม่
ls | grep '^\[Daruchini'| rm
rm: ตัวถูกดำเนินการที่หายไปลองใช้ `rm - ช่วย 'สำหรับข้อมูลเพิ่มเติม
คำตอบ:
คุณจำเป็นต้องใช้ในการเปิดเข้ามาตรฐานเข้าไปในข้อโต้แย้งxargsrm
$ ls | grep '^Dar' | xargs rm
(ระวังตัวอักษรพิเศษในชื่อไฟล์ด้วย grep GNU คุณอาจจะชอบ
$ ls | grep -Z '^Dar' | xargs -0 rm
)
นอกจากนี้ในขณะที่เชลล์ไม่ได้ใช้ regexps นั่นเป็นรูปแบบที่เรียบง่าย:
$ rm Dar*
(ในขณะเดียวกันฉันคิดว่าฉันต้องการนอนมากกว่านี้)
rm Dar* rm !(Dar*)
zsh ^โหมด (คล้ายกับของbasg !)
| tr "\n" "\0"ก่อนxargsบิต เห็นในโพสต์นี้: stackoverflow.com/questions/20307299/ …
lsอย่าแยกการส่งออกของ
ที่นี่มันง่ายมากที่จะได้เชลล์เพื่อกรองไฟล์ที่คุณต้องการ โปรดสังเกตว่ามันเป็นเชลล์ที่ขยายรูปแบบDar*ไม่ใช่rmคำสั่ง การขยายรูปแบบการดำเนินการโดยเปลือกที่เรียกว่าglobbing
rm Dar*
ในกรณีที่ซับซ้อนมากขึ้นค้นหาfindคำสั่ง
หากคุณต้องการกำหนดขอบเขตผลลัพธ์ของการgrepขึ้นบรรทัดใหม่แทนที่จะเป็นช่องว่างคุณสามารถระบุได้ว่าจะxargsผ่าน-dตัวเลือก
$ ls | grep '^Dar' | xargs -d '\n' rm
(ดังอธิบายในคำถามนี้ )
สำหรับการส่งผ่านเอาต์พุตเป็นอาร์กิวเมนต์ฉันมักจะใช้สักครู่เนื่องจากฉันไม่คุ้นเคยกับ xargs
ls | grep '^Dar' | while read line; do rm "$line";done;
คำสั่งที่ดีที่สุดสำหรับฉันคือ:
find ./Daruchini* -exec rm {}\;