Bash 命令停止并且不执行第三部分

Bash 命令停止并且不执行第三部分

我有一个命令可以获取文件夹中的任何视频,将其.ts分段转换并创建一个m3u8播放列表。

然后我需要将它们连接到一个文件中playlist.txt,所以这就是我正在做的:

cd /var/myfolder && find ./ -name "*.*" -exec ffmpeg -i {} -c:v h264 -crf 1 -flags +cgop -g 30 -hls_time 1 -hls_list_size 0 {}.m3u8 2>&1 > /dev/null \; && ls /var/myfolder/*.m3u8 | sed "s:.*/::" | xargs -i echo file {} > /var/myfolder/playlist.txt && echo done';

第一个和第二个命令工作(在文件夹中进行 cd 并进行 ffmpeg 转换),然后命令&& ls /var/myfolder/*.m3u8 | sed "s:.*/::" | xargs -i echo file {} > /var/myfolder/playlist.txt && echo done';不执行。

我不明白为什么不执行第三个命令。

答案1

您不能在find -exec.

xargs默认为echo... 但由于您已经cd进入目录,我们可以大大简化最后一行并去掉xargssed

cd /var/myfolder && 
find ./ -name "*.*" -exec ffmpeg -i {} -c:v h264 -crf 1 -flags +cgop -g 30 -hls_time 1 -hls_list_size 0 {}.m3u8 \; 2>&1 > /dev/null && 
printf 'file %s\n' *.m3u8 > /var/myfolder/playlist.txt &&
echo done

相关内容