脚本中的 STDOUT 未按预期执行

脚本中的 STDOUT 未按预期执行

由于刚刚得到帮助,我的脚本可以在名称中带有空格的目录上运行(问题 1447738 - 再次感谢),我想我可以将其输出传递到一个文本文件。

脚本如下:

find . -type d -print0 | while read -r -d $'\0' dir; do
cd "$dir"
  for file in *.ogg *.wav *.mp3
  do
   duration=$(ffprobe "$file" 2>&1 | awk '/Duration/ { print $2 }')
   echo -e "$duration\t$file"
  done | sort -n
cd - > /dev/null
done

我认为我应该能够将“echo”行更改为此以输出到文本文件:

echo -e "$duration\t$file" > length-check.log

尽管没有 sdtout > 结果显示正确,但有了 > 所有日志文件都包含以下内容:

*.ogg

*.wav

*.mp3

我知道我可以通过启动脚本来获得输出:

./length-check.sh > 长度检查.log

但我想知道脚本中哪里出了问题。

所以,再次重申,我缺乏脚本知识,这阻碍了我。如果有人能告诉我如何正确地写出这一行,我将不胜感激。

再次感谢。

答案1

每次循环迭代时,你都会覆盖输出文件。大概想要的是附加到它;使用>>而不是>

答案2

感谢大家的帮助。我们非常感激。这个问题可能仍然是个谜,因为并非所有建议都会产生日志文件输出。

我获得日志文件的唯一方法是这样启动该文件:

./length-check.sh > length-check.log

之后,将结果加载到电子表格中并按播放长度排序一切正常。

再次感谢大家,新年快乐!

相关内容