พิมพ์คำสั่งเรียกใช้โดยเชลล์


1

ฉันพยายามคัดลอกไฟล์ที่ไม่มีอยู่ในไดเรกทอรีหนึ่งไปยังไดเรกทอรีอื่นโดยใช้ awk

diff -r dir1 dir2 | grep dir1 | awk '{$1=$2=$3 =""; print "cp \"./dir1/" substr($0,4) "\" ./dir2/"}' | sh

ทำงานได้ดียกเว้นว่าฉันต้องการพิมพ์ไฟล์ที่กำลังคัดลอก สิ่งที่ต้องการcp ./dir1/file1.txt ./dir2/ในstdout

ฉันจะทำสิ่งนี้ได้อย่างไร ฉันรู้ว่ามันง่าย แต่ฉันไม่สามารถเข้าใจได้ ฉันพยายามteeและechoคำสั่ง แต่ไร้ประโยชน์


พิมพ์บนหน้าจอหรือพิมพ์บนเครื่องพิมพ์บางเครื่อง?
Adam Silenko

@AdamSilenko บนหน้าจอหรือพูด stdout
Rohit Walavalkar


มีเหตุผลอะไรที่จะไม่ใช้ rsync?
user657451

@ user657451 ฉันไม่รู้เกี่ยวกับ rsync ไม่แน่ใจว่ามันทำหน้าที่ตามวัตถุประสงค์หรือไม่
Rohit Walavalkar

คำตอบ:


2

|sh -xคุณสามารถใช้ จากหน้าคน:

 -x xtrace
         Write each command (preceded by the value of the PS4 variable
         subjected to parameter expansion and arithmetic expansion) to
         standard error before it is executed.  Useful for debugging.

ดังนั้นเชลล์จะพิมพ์ไปยังstderrคำสั่งทั้งหมดที่ดำเนินการ และคุณสามารถใช้การเปลี่ยนเส้นทาง stderr ต้องการ|sh -x 2>commands_list.txtรับรายการคำสั่งในไฟล์แยกกัน


1
เหมาะสำหรับการดูว่าสคริปต์กำลังทำอะไร แต่ถ้าคุณใช้คำสั่งเดียวเพื่อคัดลอกมัดไฟล์ตัวอย่างเช่นcp *.txt newfolder/นี้จะพิมพ์คำสั่งเดียวเท่านั้นไม่ใช่คัดลอกแต่ละไฟล์
Xen2050

1

cp สามารถบอกคุณได้ว่ากำลังทำอะไรอยู่เหมือนกันมันเป็นตัวเลือก

-v, --verbose
          explain what is being done

พิมพ์ไปยัง stdout ไฟล์ที่จะคัดลอกที่ไหนในรูปแบบ:

file1 -> file2

ใช่. มันง่ายมาก ตอนนี้ฉันรู้สึกว่าฉันได้ถามคำถามที่โง่
Rohit Walavalkar

1
ไม่เป็นคำถามที่ดี โปรแกรมส่วนใหญ่มี verbose หรือ-vตัวเลือกเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่พวกเขากำลังทำบางส่วน (เช่นgpg) จะยอมรับ v หลาย ๆ อันสำหรับ "verbosity" เพิ่มเติมให้ตรวจสอบ man page ก่อนเสมอ (หรือบางครั้งหน้าข้อมูลเพิ่มเติมถ้ามันแตกต่างกัน ) ฉันจะเดิมพัน awk อาจมีวิธีง่าย ๆ ในการส่งสำเนาไปยัง stdout ด้วย แต่ตอนนี้ฉันยังไม่เป็นปัจจุบันมากเกินไป
Xen2050
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.