如何编写一个仅当特定文件尚未在 Bash 脚本中转换时才运行的条件?

如何编写一个仅当特定文件尚未在 Bash 脚本中转换时才运行的条件?

学习 bash 脚本。我有一个脚本,它生成一个具有相同名称(不同结尾)的输出文件。如何编写一个条件,该条件仅在特定文件尚未转换为其他文件结尾时运行?

例如,收到一个新文件,我只想转换它,而不是再次转换所有文件。

for file in /video_recordings/*.flv; 

do ffmpeg -threads 2 -i "$file" "${file%.flv}".mp4; 

done;

答案1

您可以使用-eshell 测试来确定目标文件是否存在。来自help test

  -e FILE        True if file exists.

例如

for file in /video_recordings/*.flv; do 
  if [ ! -e "${file%.flv}".mp4 ]; then
    ffmpeg -threads 2 -i "$file" "${file%.flv}".mp4 
  fi
done

或者更紧凑

for file in /video_recordings/*.flv; do 

  [ -e "${file%.flv}".mp4 ] || ffmpeg -threads 2 -i "$file" "${file%.flv}".mp4 

done

如果愿意,您可以反转逻辑并使用 C 样式continue来跳过已转换的文件:

for file in /video_recordings/*.flv; do 

  if [ -e "${file%.flv}".mp4 ]; then
    continue
  fi

  ffmpeg -threads 2 -i "$file" "${file%.flv}".mp4 

done

或者

for file in /video_recordings/*.flv; do 

  [ -e "${file%.flv}".mp4 ] && continue

  ffmpeg -threads 2 -i "$file" "${file%.flv}".mp4 

done

相关内容