Você pode usar o seguinte para verificar a existência de um diretório:
if [[ -d "$1" ]]; then
Se você quiser verificar qualquer arquivo que usaria
if [[ -e "$1" || -L "$1" ]]; then
Se você quiser verificar se um arquivo é um arquivo regular (ou um link simbólico para um arquivo normal), mas NÃO um diretório (ou um dispositivo, um soquete, um pipe nomeado ...), então você pode usar:
if [[ -f "$1" ]]; then
Se o arquivo puder existir, mas você quiser ter certeza de que não é o tamanho zero:
if [[ -s "$1" ]] then;
Todos esses testes são baseados no resultado da chamada do sistema stat()
(exceto para -L
que depende de lstat()
). Se você não tiver permissão para fazer tal chamada no arquivo (por exemplo, porque você não tem acesso de pesquisa ao diretório em que o arquivo está ou a diretórios envolvidos na resolução do arquivo para links simbólicos), então os testes retornarão silenciosamente como se os arquivos não existissem.
[[ ... ]]
é um operador ksh
, também suportado por bash
e zsh
. O equivalente padrão (para usar em sh
) é com o comando [
(para o segundo exemplo acima, use [ -e "$1" ] || [ -L "$1" ]
).