Я хочу написать скрипт, но я хочу оператор if, чтобы он выполнялся только в том случае, если количество файлов в каталоге больше 1. Это возможно?
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), он получает подсказку и работает как положено.