don';我不知道如何在bash脚本中处理间距为glob的dir/file

don';我不知道如何在bash脚本中处理间距为glob的dir/file,bash,whitespace,recursion,Bash,Whitespace,Recursion,因为我的笔记本电脑里有一些视频课程。 现在我想计算每门课程的总时间。 所以我用bash编写了一个简单的脚本 对于没有空间的file/dir,它成功了。但是对于带有空格的dir/文件,它会出错。我试着将IFS设置为其他的,它也不起作用。嗯,里面也有一些bug #!/bin/bash ## Usage: calTime.sh dir #set -e getTime(){ message=$($VIDEOTOOL $OPTION $FILE | grep "Duration")

因为我的笔记本电脑里有一些视频课程。 现在我想计算每门课程的总时间。 所以我用bash编写了一个简单的脚本

对于没有空间的file/dir,它成功了。但是对于带有空格的dir/文件,它会出错。我试着将IFS设置为其他的,它也不起作用。嗯,里面也有一些bug

#!/bin/bash

## Usage: calTime.sh dir

#set -e

getTime(){
    message=$($VIDEOTOOL $OPTION $FILE | grep "Duration")
    if [ $? -eq 0 ]
    then
        local time=$(echo $message | cut -d',' -f1 | cut -d' ' -f5)
        echo -e $time "\t" $FILE 
        #second=$(($second + $time))
        let second+=$time
    fi
} 2>/tmp/error

process(){
    if [ -f $FILE ]
    then
        getTime
    elif [ -d $FILE ]
    then
        cd $FILE
        for i in $(ls);
        do
            local FILE=$i
            process
        done
    fi
}

#################
#### main #######
#################

VIDEOTOOL=/usr/bin/avidemux2_cli
OPTION="--nogui --info --load"
second=0

list=${@-./}

for FILE in $list
do
    process
done

echo $second

将变量用引号括起来。

将变量用引号括起来。

  • ,例如从
    ls
    输出
      • ,例如从
        ls
        输出

      您必须使用双引号保护变量$FILE,如“$FILE”

      您必须使用双引号保护变量$FILE,如“$FILE”

      您的问题似乎与以下行有关:

      for i in $(ls);
      
      请尝试以下方法:

      for i in *
      
      另外,正如其他人所说,任何时候你有一个包含文件名的变量,它应该在双引号中。例如:

      message=$($VIDEOTOOL $OPTION "$FILE" | grep "Duration")
      

      您的问题似乎与线路有关:

      for i in $(ls);
      
      请尝试以下方法:

      for i in *
      
      另外,正如其他人所说,任何时候你有一个包含文件名的变量,它应该在双引号中。例如:

      message=$($VIDEOTOOL $OPTION "$FILE" | grep "Duration")
      

      我使用-x标志进行调试,并在逻辑中发现问题。应该有一张cd。。为了切换回parent dir.well,我使用-x标志进行调试并在逻辑中找到问题。应该有一张cd。。更改回父目录。