set -- "${LOCATION}/"*
while [ -s "$1" ] ; do shift ; done
[ -e "$1" ] && FLAG=1
O shell integrado em [ test ] pode ser usado com o operador -s ize. De man test :
-s FILE
FILEexists and has a size greater than zero
Isso não funcionará facilmente para pesquisas recursivas.
find irá, mas para uma questão tão simples como definir um valor booleano, não é uma boa opção para este caso. ls pode realizar pesquisas recursivas com a mesma rapidez, pode ser facilmente configurado para fornecer o tamanho do arquivo como o primeiro campo para uma listagem e para listar apenas uma entrada por linha - garantida. Se você deseja definir o valor booleano de uma variável de shell com base no fato de uma listagem de arquivos recursiva conter ou não um arquivo de tamanho 0, então ls é sua melhor aposta - find apenas complica as coisas. O que você está interessado em é propriedades de arquivo, não locais de arquivo. É aqui que ls brilha e grep ping sua saída é uma brisa.
Você pode fazer isso facilmente:
ls -1aqRsp "$LOCATION" 2>&1 | grep -qv "^ *[^0]\|/"
FLAG=$(($?==0))
Isso só definirá FLAG a 1 se um arquivo - escondido .dot arquivos incluídos - existir em $LOCATION ou em um de seus diretórios filhos com um tamanho zero. Caso contrário, $FLAG é 0 .