ดังนั้นคุณจะได้ไฟล์list
ที่มี:
this
that
the-other
และคุณต้องการสร้างสำหรับแต่ละบรรทัดในไฟล์นั้นไฟล์ที่มีชื่อที่ให้ไว้ในบรรทัดนั้น มันค่อนข้างง่าย - ถ้าหากแต่ละบรรทัดประกอบด้วยเพียงคำเดียว:
cat list | xargs touch --
(การ--
บอกtouch
ไม่ให้พยายามแยกวิเคราะห์อะไรหลังจากเป็นอาร์กิวเมนต์หากไม่มีชื่อไฟล์เช่น-this
นั้นผู้นำ-
จะสร้างความสับสนให้กับการคิด 't', 'h', 'i' และ 's' นั้นมีความหมายเหมือน การขัดแย้งมากกว่าส่วนของชื่อไฟล์ที่แท้จริงที่จะสัมผัส)
นั่นเป็นกรณีง่าย ๆ ที่ได้รับการดูแล แต่ไม่ใช่สิ่งที่คุณถาม หากคุณต้องการให้ชื่อไฟล์มีข้อความเกินกว่าที่ระบุไว้ในบรรทัดlist
สิ่งต่าง ๆ จะมีความซับซ้อนมากขึ้น xargs ไม่สามารถทำการแก้ไขแบบนั้นได้ แต่คุณต้องการสิ่งต่อไปนี้ (ซึ่งต้องการให้เชลล์ของคุณเป็นbash
เช่นเดียวกับมาตรฐานในระบบส่วนใหญ่):
for file in `cat list`; do touch -- $file-customtext; done
ระวังว่าวิธีนี้จะใช้ได้เฉพาะเมื่อแต่ละบรรทัดประกอบด้วยคำเดียวเท่านั้น ในคำสั่งนี้$file
จะถูกแทนที่ด้วยชื่อไฟล์ที่ระบุในบรรทัดที่กำหนดในlist
; ทุกอย่างรอบตัวมันถูกถ่ายอย่างแท้จริงดังนั้นคำสั่งนี้ที่มีlist
เนื้อหาด้านบนจะสร้างไฟล์ต่อไปนี้
this-customtext
that-customtext
the-other-customtext
คุณสามารถแทนที่ '-customtext' ด้วยสิ่งที่คุณต้องการแน่นอนและคุณสามารถมีคำนำหน้าเช่นเดียวกับคำต่อท้าย; do touch -- some-$file-text
ตัวอย่างเช่นถ้าคุณมีมันจะทำงานได้ดีและส่งผลให้ไฟล์ชื่อsome-this-text
& c
ตอนนี้สมมติว่าเนื้อหาของlist
ไม่ง่ายนัก - โดยเฉพาะพวกมันมีช่องว่างอักขระที่ไม่ใช่คำหรือสิ่งอื่น ๆ ที่เชลล์ไม่สามารถตีความได้อย่างถูกต้อง หากคุณถามคนสามคนถึงสิ่งที่พวกเขาต้องการแนะนำในกรณีนี้คุณน่าจะได้รับคำตอบห้าข้อ ฉันเป็นแฮ็กเกอร์ Perl ดังนั้นคำตอบของฉันคือ Perl โดยเฉพาะสมมติlist
ว่ามี:
This is the first line
of three (three?) lines
in the list file.
วิธีที่ฉันจะทำคือ:
cat list | perl -ne'chomp; system(qq|touch -- "custom $_ text"|)'
ซึ่งสร้างไฟล์ผลลัพธ์:
custom This is the first line text
custom of three (three?) lines text
custom in the list file. text
ข้อความที่กำหนดเองในกรณีนี้อาจเป็นสิ่งที่คุณต้องการเว้นวรรคและทั้งหมดตราบใดที่มันไม่มี"
(ซึ่งจะทำให้สับสนtouch
) หรือ'
(ซึ่งจะทำให้สับสนperl
); ในคำสั่ง Perl $_
หมายถึงเนื้อหาของบรรทัดที่list
กำหนดและข้อความที่กำหนดเองเป็นของก่อนหรือหลัง แต่ภายในเครื่องหมายคำพูดคู่ (ข้อความที่กำหนดเองนอกเครื่องหมายคำพูดคู่จะถูกพิจารณาtouch
ว่าเป็นชื่อไฟล์แยกซึ่งจะถูกสร้างขึ้นอย่างแท้จริงเว้นแต่จะมีสิ่งที่จะทำให้เกิดtouch
ข้อผิดพลาด)
... < list.txt
มากกว่าcat list.txt | ...
? ได้รับการวางไข่หลังเป็นcat
กระบวนการที่อดีตไม่ได้ แต่ก็ยังมีพฤติกรรมที่คาดการณ์ได้มากขึ้นและชัดเจนยิ่งกว่า ...