O stat
comando oferece, ou bash
oferece, uma maneira direta de verificar se se FILENAME
refere a um arquivo em vez de, digamos, a um diretório?
Usando bash
and stat
, aqui está minha solução feia:
if RESPONSE="$(LC_ALL=C stat -c%F FILENAME)"\
&& [ "$RESPONSE" = 'regular file'\
-o "$RESPONSE" = 'regular empty file' ]
then
# do something ...
fi
Veja também esta questão relacionada.
O
-f
teste será verdadeiro se o nome fornecido for o nome de um arquivo normal ou um link simbólico para um arquivo normal. O-h
teste será verdadeiro se o nome fornecido for o nome de um link simbólico. Isso está documentado em ambosman test
(ouman [
) ehelp test
em umabash
sessão de shell. Ambos os testes são testes padrão que qualquer POSIXtest
e[
utilitário implementariam.A mesma coisa usando
stat
no OpenBSD (os seguintes bits de código também usam o-e
teste padrão apenas para garantir que o nome exista no sistema de arquivos antes de chamarstat
):(um tipo de arquivo de
10
indica um arquivo regular).Se estiver usando GNU
stat
:O padrão neste último teste corresponde à string
regular file
e aoregular empty file
.Uma
stat
solução conforme solicitado.stat --printf "%F" file-name
ver manual (extrato abaixo)