1

Я хочу написать скрипт, но я хочу оператор if, чтобы он выполнялся только в том случае, если количество файлов в каталоге больше 1. Это возможно?

3 ответа3

3

Что-то вроде

[ "$(ls -b | wc -l)" -gt 1 ] && { ... your statements ... }
0

Я буду использовать что-то вроде:

    dir=.
    nf=`find . -maxdepth 1 -type f | wc -l`

    if [ "$nf" -gt "1" ] ; then
            <do something here>
    fi

Этот подход будет подсчитывать только files в каталоге, указанном в dir и отбрасывать все возможные подкаталоги.

Не забудьте изменить dir соответствии с вашими потребностями.

0

Мне нужно было использовать это:

shopt -s nullglob
files=($dir/*) # $dir was declared earlier if you look at my script
if (( "${#files[@]}" >= 2 ));
     <statements>
fi
shopt -u nullglob

Причина, по которой ни одно из представленных здесь решений не сработало, заключается в следующем. Сценарий выполняет операторы ПРОТИВ каталогов, на самом деле это не CD-IN для каталогов. Сообщая ему, с какой папкой я работаю ($ dir), он получает подсказку и работает как положено.

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