не знаю, как справиться с dir / file с пробелами как glob в скриптах bash - PullRequest
1 голос
/ 21 июня 2010

Так как у меня есть несколько видео курсов на моем ноутбуке. Теперь я хочу рассчитать общее время каждого курса. Поэтому я пишу простой скрипт с bash.

Это успешно для файла / каталога без пробела. Но для dir / files с пробелом все идет не так. Я пытался настроить IFS на что-то другое, оно тоже не работает. Ну, там также есть некоторые ошибки.

#!/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

Ответы [ 4 ]

1 голос
/ 21 июня 2010

Похоже, ваша проблема со строкой:

for i in $(ls);

Попробуйте вместо этого:

for i in *

Плюс, как уже говорили другие, всякий раз, когда у вас есть переменная, которая содержит имя файла, она должна быть в двойных кавычках. Например:

message=$($VIDEOTOOL $OPTION "$FILE" | grep "Duration")
1 голос
/ 21 июня 2010
1 голос
/ 21 июня 2010

Вы должны защитить свою переменную $ FILE двойной кавычкой, например "$ FILE"

1 голос
/ 21 июня 2010

Вставьте свои переменные в кавычки.

...