xargs touch ตามด้วยคำสั่งที่สอง


2

ฉันสุ่มเลือกไฟล์จากไดเรกทอรีที่ฉันต้องการประมวลผลและฉันต้องการใช้คำสั่งสัมผัสกับพวกเขาเพื่อที่ฉันจะได้รู้ว่าไฟล์สุดท้ายที่ถูกสร้างภาพจากนั้นใช้โปรแกรมสร้างภาพ บางสิ่งเช่นนี้

while [ 1 ]; do ls | shuf | xargs "touch & vizprogram"; done

เนื่องจากฉันตรวจสอบชุดข้อมูลเหล่านี้ด้วยตนเองฉันต้องการ "Esc" จากลูป ณ จุดใดก็ได้เพื่อที่ฉันจะขัดจังหวะ vizprogram และวนซ้ำอีกครั้ง จากนั้นเมื่อฉันพบไฟล์ที่ฉันต้องการติดตามฉันต้องการ Ctrl + C และทำls -rt | tail -n 1เพื่อให้มีชื่อของไฟล์ล่าสุดที่ฉันใช้ ฉันลองสิ่งนี้ด้วยการวนรอบหรือขณะแทนแทนที่จะทำxargsแต่ฉันไม่สามารถทำ "Esc" บนวนรอบหลักได้

ความคิดใด ๆ ที่จะทำ "สัมผัสแล้ว vizprogram" ภายใน xargs?

คำตอบ:


1

หากvizprogramผลตอบแทนจริงถ้าออกจากกับ ESC และเท็จถ้าออกด้วย Ctrl-C คุณสามารถทำได้:

while ls | shuf | parallel --halt 2 -j1 "touch {}; vizprogram {}"; do true; done

คุณสามารถติดตั้ง GNU Parallel ได้ง่ายๆโดย:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

ดูวิดีโอแนะนำสำหรับ GNU Parallel เพื่อเรียนรู้เพิ่มเติม: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


2

สร้างเชลล์สคริปต์เช่นต่อไปนี้:

#!/usr/bin/env bash
while [ $# -gt 0 ]
do
    touch "$1"
    vizprogram "$1"
    shift
done

จากนั้นxargsเรียกใช้งานมัน:

echo "file file2 file3" | xargs /path/to/script.sh

ไม่แน่ใจว่าสิ่งที่คุณหมายถึงไม่สามารถทำ "Esc" Ctrl-Cทำงานได้ดีกับคำตอบของฉัน แจ้งให้เราทราบหากฉันพลาดจุดนี้ไปฉันจะลบทิ้ง
Daniel Beck

ฉันใช้ "Esc" เพื่อขัดจังหวะ vizprogram สำหรับไฟล์ที่ฉันไม่ต้องการติดตาม แต่ให้กด Ctrl + C เพื่อหยุดลูปเมื่อพบไฟล์ที่ต้องการตรวจสอบอย่างใกล้ชิด ฉันต้องการให้ไฟล์นี้ถูกทำเครื่องหมายอย่างใดและการสัมผัสกับมันจะให้ชื่อไฟล์ของฉันโดยเป็นคนที่มีการประทับเวลาล่าสุด
719016

@avilella ยกเว้นว่าคุณจะแก้ไขvizprogramไม่มีวิธีการอื่นนอกเหนือจากที่ฉันแนะนำ xargsวิธีการของคุณทำงานvizprogramกับไฟล์ทั้งหมดเป็นอาร์กิวเมนต์ตามลำดับ - คุณไม่สามารถแทรกสิ่งอื่นด้วยการเรียกใช้โปรแกรมเดียว การเรียกใช้ส่วนบุคคลสำหรับทุกไฟล์คล้ายกับที่ฉันแนะนำหรือแก้ไขvizprogramเป็นตัวเลือกเดียวของคุณที่ฉันกลัว (แม้ว่าฉันจะรอการพิสูจน์ว่าผิด)
Daniel Beck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.