Shell-Script
使用 find -exec 和 while 創建 for 循環
我正在嘗試製作這個腳本來循環在 00 到 12 小時之間創建的影片文件,用 ffmpeg 轉換它們,然後將它們刪除。
該腳本在查找文件和啟動 ffpmeg 方面起作用,但在第一次轉換開始 ffmpeg 之後,它似乎繼續從 find -exec“發送”字元,並最終破壞 ffmpeg 並停止轉換。如何修改腳本以使這種情況不會發生?
目前腳本
!/bin/bash -e find /videos/. -type f -print0 -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 00 ] && [ "$h" -lt 12 ]' sh {} \;|while read -d $'\0' i; do ffmpeg -y -i "$i" -vcodec libx264 -crf 27 -preset veryfast -movflags +faststart -c:a copy -threads 14 /output/"$(basename "$i" .ts)".mp4 rm -f -- "$i" done
感謝 Gordon Davisson,我設法解決了這個問題。如果將來有人碰巧遇到此問題,這是完整的工作腳本。
#!/bin/bash -e find /videos/. -type f -exec sh -c 'h=$(date -d @$(stat -c %Y "$1") +%-H); [ "$h" -ge 00 ] && [ "$h" -lt 12 ]' sh {} \; -print | while IFS= read -r i; do ffmpeg -y -i "$i" -vcodec libx264 -crf 27 -preset veryfast -movflags +faststart -c:a copy -threads 14 /output/"$(basename "$i" .ts)".mp4 </dev/null rm -f -- "$i" done