我有一个名为tutorials的文件夹。在其中,大约有15个文件夹,每个文件夹包含约15-20个.mp4
视频文件。我想获取文件夹中存在的所有文件的总持续时间tutorials
。这是我到目前为止编写的代码:
for d in ~/Videos/tutorials/*; do
if [ -d "$d" ]; then
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
fi
done
上面的代码在执行时会File not found: ./*.mp4
为教程中存在的每个子文件夹提供错误。但是,当行
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' ./*.mp4| tail -n1
在每个子文件夹中单独执行,我能够获得正确的输出。
我应该在上面的代码中进行哪些更改才能使其正常工作?
您可以改用此方法,它会在一个特定的文件夹和所有子文件夹中找到所有mp4,并将它们的持续时间总计。如果它们有特殊字符(例如空格等),这也要注意。
find ~/Videos/tutorials/ -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
还要查看每个子文件夹的总数
#!/bin/bash
SEARCHPATH=~/Videos/tutorials
echo "## TOTAL OF EVERY MP4"
find $SEARCHPATH -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
find $SEARCHPATH -type d > /tmp/allFolders.txt
while read -r; do
echo "## TOTAL OF $REPLY"
find "$REPLY" -maxdepth 1 -name "*.mp4" -printf "\"%p\" " | xargs exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)}' | tail -n 1
done < /tmp/allFolders.txt
#cleanup
rm /tmp/allFolders.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句