ฉันใช้บรรทัดต่อไปนี้เพื่อแปลง

for f in *.mkv; do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4";&& rm "{$f}.mkv"; done

ฉันต้องการสิ่งนี้เพื่อตรวจสอบไดเรกทอรีย่อยด้วย แต่ฉันได้รับข้อผิดพลาดโทเค็นหรือข้อผิดพลาดของทุบตี

นอกจากนี้ยังไม่ลบไฟล์ mkv เมื่อแปลงเสร็จแล้ว

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

answer

ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4";&& rm "{$f}.mkv";เป็นข้อผิดพลาดทางไวยากรณ์ - คุณไม่สามารถมี a &&หลังจาก;. มันควรจะเป็นเพียงffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4" && rm "{$f}.mkv";แค่ จากนั้นของคุณ$fลงท้าย.mkvด้วย ดังนั้นrmคำสั่งควรเป็นrm "$f".

ในการเรียกซ้ำในไดเร็กทอรีย่อย ให้ใช้globstar:

shopt -s  globstar
for f in **/*.mkv; do ... done

ทั้งหมดบอกว่า:

#! /bin/bash
shopt -s  globstar
for f in **/*.mkv
do
  ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4" &&
    rm "$f"
done

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