Em geral, se quisermos executar um comando se find
identificar arquivos correspondentes a determinadas especificações, podemos usar -exec
. Mas no meu caso eu quero sair do shell / script se find
encontrou uma correspondência e -exec
não pode fazer isso. [Aparentemente, find
' -exec
não pode ligar o bash funciona .
Por exemplo, em um script para remover uma árvore se e somente se ela contiver apenas diretórios vazios, eu gostaria de primeiro verificar a presença de qualquer não-diretório e abortar com uma mensagem de erro na primeira entrada inesperada.
Até agora, sempre que preciso fazer algo assim, coloco a saída em uma variável (possivelmente usando -quit
com find
) e testando se ela está vazia ou não.
Então meu script parece:
#! /bin/sh
INTRUDER="$(find "$@" ! -type d -print -quit)"
if [ -n "$INTRUDER" ] ; then
echo "Found non-dir $INTRUDER; leaving the arguments untouched"
exit 1
fi
rm -R "$@"
Existe uma abordagem diferente / melhor do que isso? Por "melhor" quero dizer, menor para o código, mais portátil (se houver algum problema de portabilidade com o acima), etc. Por "diferente" quero dizer, evitando a variável extra e teste para o seu comprimento.