Bash循环仅处理每个其他文件

时间:2012-06-20 15:50:10

标签: bash loops

我一直在编写一个脚本来为我的家庭视频生成.tbn文件。如果我运行脚本,它似乎只处理每个其他文件。

#!/bin/bash

find ~/Movies/Home\ Movies/Canada\ Trip -type f | egrep '\.mp4$|\.avi$|\.mkv$' | while read file ; do

    if [ ! -f "${file:0:${#file}-3}tbn" ]; then
        # .tbn not found
        echo "$file"
        ffmpeg  -itsoffset -13  -i "$file" -vcodec mjpeg -vframes 1 -s 400x224 -an -f rawvideo "${file:0:${#file}-3}tbn"
    fi

done

这是我的数据集:

Canada.Trip.S01E01.avi
Canada.Trip.S01E02.avi
Canada.Trip.S01E03.avi
Canada.Trip.S01E04.avi
Canada.Trip.S01E05.avi
Canada.Trip.S01E06.avi
Canada.Trip.S01E07.avi
Canada.Trip.S01E08.avi
Canada.Trip.S01E09.avi
Canada.Trip.S01E10.avi
Canada.Trip.S01E11.avi
Canada.Trip.S01E12.avi
Canada.Trip.S01E13.avi
Canada.Trip.S01E14.mp4
Canada.Trip.S01E15.mp4
Canada.Trip.S01E16.mp4
Canada.Trip.S01E17.mp4
Canada.Trip.S01E18.avi
Canada.Trip.S01E19.mkv
Canada.Trip.S01E20.mp4

因此,我第一次运行它时,会为1,3,5,7等生成tbn。偶数编号的文件会失败并显示vies/Canada Trip/Canada.Trip.S01E16.mp4: No such file or directory (请注意文件名的截断开头)

如果我再次运行脚本,它会生成偶数文件.tbn文件。我之前从未使用过Bash所以我发现整个情况令人困惑!

1 个答案:

答案 0 :(得分:1)

ffmpeg reads stdin。此外,您应始终使用read -r