จากความเข้าใจของฉันต่อไปนี้ควรมีความหมายเหมือนกันทุกประการ:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
หากไม่ได้ระบุตัวเลือก -I ไว้ค่าเริ่มต้นคือ -I {}
ฉันต้องการแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและเรียกใช้file
คำสั่งในแต่ละไฟล์ บางแห่งมีช่องว่างในชื่อ อย่างไรก็ตามฉันสังเกตเห็นความแตกต่าง ดูด้านล่าง:
$ ls -1
Hello World
$ ls -1 | xargs file {}
{}: ERROR: cannot open `{}' (No such file or directory)
Hello: ERROR: cannot open `Hello' (No such file or directory)
World: ERROR: cannot open `World' (No such file or directory)
$ ls -1 | xargs -I{} file {}
Hello World: directory
ด้วย -I {} ที่ระบุไว้อย่างชัดเจนช่องว่างในชื่อไฟล์จะถือว่าเป็นไปตามที่คาดไว้
xargs file
ไม่ควรจะเป็นxargs -I{} file {}
xargs file {}
ผมคิดว่าเมื่อระบุอย่างชัดเจน -I {} file "Hello World"
ทุบตีจะรักษามันเป็น โดยไม่ต้อง -I {} file Hello World
ก็จะถือว่าเป็น
-1
ตัวเลือกเป็นไปls
ตามค่าเริ่มต้นเมื่อเอาต์พุตของls
ไฟล์หรือไพพ์ดังนั้นคุณไม่จำเป็นต้องใช้ที่นี่ (3) คุณกำลังสับสน-I
กับตัวเลือกที่คัดค้าน-i
(ตัวพิมพ์เล็กI
) -ifoo
เทียบเท่ากับ-Ifoo
แต่ธรรมดาเทียบเท่ากับ-i
แต่การใช้งาน-I{}
-I{}
(4) ถ้าคุณต้องการทำสิ่งที่คุณพูดว่าต้องการทำจริงๆทำไมไม่เพียงแค่พูดfile *
?
file
กับมัน ls
แต่ฉันมากับตัวอย่างที่ง่ายโดยใช้ คุณพูดถูก สำหรับสิ่งfile *
ที่ดีที่สุด
-exec
มี