ฉันพยายามค้นหาไฟล์ทั้งหมดบางประเภทที่กระจายอยู่ในไดเรกทอรีย่อยและเพื่อจุดประสงค์ของฉันฉันต้องการชื่อไฟล์เท่านั้น ฉันพยายามลอกส่วนประกอบเส้นทางผ่านbasename
แต่ไม่ได้ทำงานกับxargs
:
$ find . -name '*.deb' -print | xargs basename
basename: extra operand `./pool/main/a/aalib/libaa1_1.4p5-37+b1_i386.deb'
Try `basename --help' for more information.
ฉันได้รับสิ่งเดียวกัน (ข้อผิดพลาดเดียวกันอย่างแน่นอน) กับรูปแบบอย่างใดอย่างหนึ่งเหล่านี้:
$ find . -name '*.deb' -print0 | xargs -0 basename
$ find . -name '*.deb' -print | xargs basename {}
ในทางกลับกันการทำงานตามที่คาดไว้:
$ find . -name '*.deb' -exec basename {} \;
foo
bar
baz
สิ่งนี้เกิดขึ้นใน Cygwin ที่ทันสมัยและ Debian 5.0.3 การวินิจฉัยของฉันคือ xargs ด้วยเหตุผลบางอย่างผ่านสองบรรทัดอินพุตไปยังชื่อฐาน แต่ทำไม? เกิดอะไรขึ้นที่นี่?