ฉันพยายามที่จะgrep
ส่งออกท่อไปrm
แต่มันก็ส่งผลสิ่งที่ไร้ประโยชน์ จำเป็นต้องมีสวิตช์rm
หรือไม่ หรือสามารถrm
ให้ regexp โดยตรงได้หรือไม่
ls | grep '^\[Daruchini'| rm
rm: ตัวถูกดำเนินการที่หายไปลองใช้ `rm - ช่วย 'สำหรับข้อมูลเพิ่มเติม
ฉันพยายามที่จะgrep
ส่งออกท่อไปrm
แต่มันก็ส่งผลสิ่งที่ไร้ประโยชน์ จำเป็นต้องมีสวิตช์rm
หรือไม่ หรือสามารถrm
ให้ regexp โดยตรงได้หรือไม่
ls | grep '^\[Daruchini'| rm
rm: ตัวถูกดำเนินการที่หายไปลองใช้ `rm - ช่วย 'สำหรับข้อมูลเพิ่มเติม
คำตอบ:
คุณจำเป็นต้องใช้ในการเปิดเข้ามาตรฐานเข้าไปในข้อโต้แย้งxargs
rm
$ 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 {}\;