ดังนั้นคุณจะได้ไฟล์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กระบวนการที่อดีตไม่ได้ แต่ก็ยังมีพฤติกรรมที่คาดการณ์ได้มากขึ้นและชัดเจนยิ่งกว่า ...