【发布时间】:2020-07-24 06:31:54
【问题描述】:
我正在尝试制作一个查看文件夹的脚本,并将使用手刹自动对进入该文件夹的文件进行编码。我想这样做监视文件夹,使用 inotify 将文件夹中的新增内容放入列表中,然后使用 cron 作业在一夜之间对它们进行编码。但是,当使用 while 循环遍历列表时,手刹仅对存在的第一个文件进行编码,然后脚本在循环之后继续执行,而不执行列表中的每个文件。这是调用手刹的脚本:
#!/bin/bash
while IFS= read -r line
do
echo "$(basename "$line")"
HandBrakeCLI -Z "Very Fast 1080p30" -i "$line" -o "$line.m4v"
rm "$line"
done < list.txt
> list.txt
当使用简单的 echo 而不是 HandBrakeCLI 测试循环时,它可以正常工作并打印出每个文件,所以我不知道出了什么问题。
这是监控文件夹的脚本,以防出现问题:
#!/bin/bash
if ! [ -f list.txt ]
then
touch list.txt
fi
inotifywait -m -e create --format "%w%f" tv-shows | while read FILE
do
echo "$FILE" >> list.txt
done
任何帮助都会很棒,谢谢
编辑: 更具体地说,该脚本适用于 list.txt 中的第一个文件,它对其进行编码没有问题并删除旧版本,但它不会执行列表中的任何其他文件
【问题讨论】:
-
您可以使用
bash -xv YourHandbrakeScriptName运行第一个脚本,以查看每行执行时的所有变量。 -
除了手刹的输出,如果需要我可以发布,我只是输出这个:+ rm 'tv-shows/Marvels The Avengers- Trailer (OFFICIAL).mp4' + IFS= + read -r line # > list.txt 我还注释掉了 >list.txt 以进行测试,这样我就可以继续在 list.txt 上运行编码器,而不必重新键入它不太确定我在寻找什么。目前只是用预告片测试它
-
嗯,您可以尝试在以
HandbrakeCLI开头的行末尾添加一个空格,后跟< /dev/null,以防它占用stdin。 -
在 HB 中不回声可能会有所帮助...stackoverflow.com/a/17414265/2836621
-
当
... < /dev/null失败时,echo "" | ...应该无法工作。你能再检查一下吗?