Algo como
[ "$(ls -b | wc -l)" -gt 1 ] && { ... your statements ... }
Eu quero escrever um script, mas eu quero uma instrução if para que ele seja executado somente se o número de arquivos no diretório for maior que 1. Isso é possível?
Algo como
[ "$(ls -b | wc -l)" -gt 1 ] && { ... your statements ... }
Eu precisava usar isso:
shopt -s nullglob
files=($dir/*) # $dir was declared earlier if you look at my script
if (( "${#files[@]}" >= 2 ));
<statements>
fi
shopt -u nullglob
A razão pela qual nenhuma das soluções postadas aqui funcionou é por causa do seguinte. O script está executando as instruções CONTRA os diretórios, não é realmente CD'ing IN para os diretórios. Ao dizer a pasta com a qual estou trabalhando ($ dir), ele recebe a dica e funciona como esperado.
Vou usar algo como:
dir=.
nf='find . -maxdepth 1 -type f | wc -l'
if [ "$nf" -gt "1" ] ; then
<do something here>
fi
Essa abordagem só contará files
no diretório apontado por dir
e descartará qualquer subdiretório possível.
Não se esqueça de alterar dir
de acordo com suas necessidades.
Tags bash linux shell-script