don';我不知道如何在bash脚本中处理间距为glob的dir/file
因为我的笔记本电脑里有一些视频课程。 现在我想计算每门课程的总时间。 所以我用bash编写了一个简单的脚本 对于没有空间的file/dir,它成功了。但是对于带有空格的dir/文件,它会出错。我试着将IFS设置为其他的,它也不起作用。嗯,里面也有一些bugdon';我不知道如何在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")
#!/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
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。。更改回父目录。