我的腳本是:(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 64位。然後,我在Win8 x64上安裝了cygwin,並嘗試運行該腳本。我得到的錯誤:
(standard_in)1:非法字符:^ M
(standard_in)1:語法錯誤
我搜索了一下,發現它主要是由引起DOS下的unix字符,反之亦然。我在文件durationAdder.sh
(我的腳本)上運行了dos2unix
,輸出建議成功轉換。但我仍然不斷收到錯誤。爲什麼是這樣的,我該如何解決?
嘗試運行'unix2dos' –
@IporSircer已經嘗試過。它將它轉換爲unix格式,因此該文件無法由cygwin執行。然後,我使用dos2unix將文件轉換回來(以確保所有贏得的角色,包括可能已經逃脫我的抓取的所有贏得角色最初轉換爲unix格式)。但那也沒有幫助。我仍然得到錯誤。 –
該腳本適用於我。可能是'^ M'在ffprobe的輸出中,我沒有? – matzeri