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
FILE
exists 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
.