내 스크립트는 다음과 같습니다(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}"
내가 원래 우분투 16.04.1 LTS의 64에 썼다. Win8 x64에 cygwin을 설치하고 스크립트를 실행하려고했습니다. 나는 오류를 얻을 :
(standard_in) 1 : 잘못된 문자 : M
(standard_in) 1^: 구문 오류
나는 조금 검색하고 주로에 의한 것 발견 DOS에서는 유닉스 문자를, 그 반대의 경우도 마찬가지입니다. 파일 durationAdder.sh
(내 스크립트)에서 dos2unix
을 실행했는데 결과가 성공적인 변환을 제안했습니다. 하지만 여전히 오류가 계속 발생합니다. 왜 그런가요? 어떻게 수정합니까?
'unix2dos'를 실행 해 봅니다. –
@IporSircer 이미 시도했습니다. 유닉스 형식으로 변환했기 때문에 파일을 cygwin에서 전혀 실행할 수 없었다. 그런 다음 dos2unix를 사용하여 파일을 다시 변환했습니다. 원래는 내 파악을 벗어 났을 수도있는 모든 단일 문자를 포함하여 모든 승리 문자가 유닉스 형식으로 변환되었습니다. 하지만 그건 도움이되지 못했습니다. 나는 여전히 오류가 발생합니다. –
스크립트가 저에게 효과적입니다. '^ M'은 ffprobe의 출력에있을 수 있습니다. – matzeri