이 스크립트의 출력이 없는 이유는 무엇입니까?

이 스크립트의 출력이 없는 이유는 무엇입니까?

폴더의 비디오 파일을 분석하여 해당 폴더의 총 비디오 지속 시간과 해당 폴더 및 모든 하위 폴더의 비디오 지속 시간을 출력하는 bash 스크립트를 작성하려고 합니다. 내 코드는 다음과 같습니다

#!/bin/bash

### Outputs the total duration of video in each folder (recursively).
##  Incase an argument is not provided, the basefolder is assumed to be pwd.

# Defining custom Constants & functions
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
NC='\033[0m' # No Color

echoErr() { 
    echo -e "${RED}[ERROR]${NC}: $@" 1>&2
    exit
}

folderTime() {
    echo $(find . -maxdepth 1 -iname '*.mp4' -exec ffprobe -v quiet -of csv=p=0 -show_entries format=duration {} \; | paste -sd+ -| bc)
}

# Setting the base directory
if [ "$#" -lt 1 ]; then
    baseDir="$(pwd)"
else
    baseDir="$1"
fi

cd "$baseDir" || echoErr "Error switching to $baseDir"

# Actual calculation of the total video duration in each folder - using a function.
totalTime=0
function calcTime() {
    local incomingTime=$totalTime
    local newTotalTime=0
    local immediateTime=0
    newTotalTime=immediateTime=$(folderTime)
    for f in "$1"*
    do
        if [ -d "$f" ]; then
            cd "$f" || echoErr "Can't switch to $f" 
            calcTime "$f"
            newTotalTime=$(( $newTotalTime + $totalTime ))
        fi
    done
    totalTime=$(( $newTotalTime + $incomingTime ))
    echo -e "The duration of video in just $f is : \t\t${BLUE}$immediateTime${NC}"
    echo -e "The Total duration of video in $f and subfolders is : \t${GREEN}$totalTime${NC}"
}
calcTime "$baseDir"

위 코드는 출력을 생성하지 않지만 실행도 중지되지 않습니다. 나는 bash 스크립팅을 처음 접했고 몇 가지 실수를 저질렀다고 확신하지만 그것이 무엇인지 평생 알 수는 없습니다. 도와주세요.

또한 이 스크립트를 개선할 수 있는 방법을 알려주십시오. 감사해요!

답변1

실수로 재귀 루프에 자신을 코딩했습니다. 문제는 calcTime()함수 내부에 있습니다.

for f in "$1"*

호출하면 pwd후행 슬래시가 생략됩니다. 따라서 는 항상 로 설정 for f in "$1"*됩니다 .for f in "/my/current/directory*"f/my/current/directory

calcTime()해당 루프 내에서 호출 하므로 무한히 반복됩니다. for 루프 정의를 다음과 같이 변경하면 더 나은 성능을 발휘할 것이라고 생각합니다.

for f in "$1"/*

관련 정보