学习 bash 脚本。我有一个脚本,它生成一个具有相同名称(不同结尾)的输出文件。如何编写一个条件,该条件仅在特定文件尚未转换为其他文件结尾时运行?
例如,收到一个新文件,我只想转换它,而不是再次转换所有文件。
for file in /video_recordings/*.flv;
do ffmpeg -threads 2 -i "$file" "${file%.flv}".mp4;
done;
答案1
您可以使用-e
shell 测试来确定目标文件是否存在。来自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