เหตุผลที่ผู้คนใช้xargs
ร่วมกับการค้นหาคือชื่อไฟล์หลายชื่อจะถูกส่งผ่านไปยังการเรียกใช้โปรแกรมเดียวกันของสิ่งที่xargs
เปิดตัวโปรแกรม ตัวอย่างเช่นหากfind
ส่งคืนไฟล์foo , barและbazสิ่งต่อไปนี้จะทำงานmv
เพียงครั้งเดียว:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
อย่างมีประสิทธิภาพมันเรียกร้องmv
ดังต่อไปนี้:
mv -t destDir foo bar baz
หากคุณไม่ต้องการหรือต้องการพฤติกรรมนี้ (ตามที่ผมถือว่าเป็นกรณีที่นี่) คุณก็สามารถใช้'sfind
-exec
ในกรณีนี้ทางออกที่ง่ายคือการเขียนเชลล์สคริปต์แบบสั้นดังต่อไปนี้:
#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
F="$( basename $P )"
ffmpeg -i "$P" -f flv "$F"
บันทึกเป็นและเรียกใช้myffmpeg.sh
chmod +x myffmpeg.sh
จากนั้นเรียกใช้สิ่งต่อไปนี้:
find . -iname "*.mov" -exec /path/to/myffmpeg.sh {} \;
สิ่งนี้จะเรียกใช้เชลล์สคริปต์หนึ่งครั้งสำหรับทุกไฟล์ที่พบ เชลล์สคริปต์จะแยกชื่อไฟล์ออกจากพา ธ เต็มและเรียกใช้ffmpeg
ด้วยอาร์กิวเมนต์ที่เหมาะสม
xargs
ทั่วไปอาจต้องการตรวจสอบstackoverflow.com/questions/3770432/...