1

Я пытался найти папки в моей музыкальной коллекции, которые не содержат mp3-файлов (в некоторых есть только обложки альбомов, плейлисты и тому подобное). Так что у меня было что-то подобное в сценарии оболочки.

#!/bin/bash
for DIR in *
do
        [[ -d "${DIR}" ]] || continue
        cd "${DIR}"

        ls *.mp3 > /dev/null 2>&1
        if [[ "$?" != "0" ]]
        then
                echo $DIR has no MP3 files!
                continue
        fi

        cd ..
done

Тем не менее, несмотря на то, что нужно пройти через много папок, этот сценарий проверяет только первую папку перед выходом ... почему это так? Это похоже на то, как будто оператор continue внутри if выходит из цикла.

1 ответ1

3

Оператор continue внутри блока if является источником вашей проблемы:

Если файлы MP3 не были найдены, cd .. не будет запущен, и условие [[ -d "${DIR}" ]] , скорее всего, не будет выполнено для всех остальных каталогов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .