私のスクリプトは次のとおりです。(standard_in)1:不正な文字です:^ M - dos2Unixは機能しませんか?
#!/bin/bash
LGREEN='\033[1;32m'
LBLUE='\033[1;36m'
NC='\033[0m'
function convertToTime {
min=$(echo "$min+$sec/60" | bc)
sec=$(echo "$sec%60" | bc)
hrs=$(echo "$hrs+$min/60" | bc)
min=$(echo "$min%60" | bc)
}
function convertToTimeTotal {
totalMin=$(echo "$totalMin+$totalSec/60" | bc)
totalSec=$(echo "$totalSec%60" | bc)
totalHrs=$(echo "$totalHrs+$totalMin/60" | bc)
totalMin=$(echo "$totalMin%60" | bc)
}
totalSec=0
totalMin=0
totalHrs=0
function recursiveDirFinder {
presentDir=$1
cd "$presentDir"
ls >filelist.tmp
sec=0
min=0
hrs=0
while
read fileName
do
if
test -d "$fileName"
then
presentDir+="/$fileName"
recursiveDirFinder "$presentDir"
presentDir=$1
else
if [[ $fileName == *.mp4 ]]; then
s=`ffprobe -v quiet -of csv=p=0 -show_entries format=duration "$fileName"`
sec=$(echo "$sec+$s" | bc)
fi
fi
done <filelist.tmp
convertToTime
echo -e "Video Duration in $1 is ${LBLUE}$hrs:$min:$sec${NC}"
totalSec=$(echo "$totalSec+$sec" | bc)
rm filelist.tmp
cd ..
}
recursiveDirFinder "E:/RBR Lectures"
convertToTimeTotal
echo -e "Total Duration is ${LGREEN}$totalHrs:$totalMin:$totalSec${NC}"
私はもともとのUbuntu 16.04.1 LTS x64の上でこれを書いています。私はcygwinをWin8 x64にインストールし、スクリプトを実行しようとしました。私はエラーを取得:
(standard_in)1:不正な文字:M
(standard_in)1 ^:構文エラー
は、私は少しを検索し、それは主に起因していますことを発見UNIXの文字はDOSで、逆もまた同様です。私はファイルdurationAdder.sh
(私のスクリプト)にdos2unix
を実行しました、そして、出力は成功した変換を提案しました。しかし、私はまだエラーが発生し続けています。なぜですか、どうすれば修正できますか?
'unix2dos'を試してみてください –
@IporSircer既に試してみました。これをunix形式に変換したので、cygwinではファイルを実行できませんでした。それからdos2unixを使ってファイルを元に戻しました。私の握りをエスケープした可能性のあるすべての勝利キャラクターが元々Unixフォーマットに変換されていることを保証します。しかし、それはどちらも役に立たなかった。私はまだエラーが発生します。 –
スクリプトは私のために働く。 '^ M'はffprobeの出力にありますが、私にはありませんか? – matzeri