Shell-Script

使用 find -exec 和 while 創建 for 循環

  • March 11, 2019

我正在嘗試製作這個腳本來循環在 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

引用自:https://unix.stackexchange.com/questions/505679