Como ver se o diretório existe?

1

Como posso verificar se /bin/x86_64/bin/ls é um diretório em um script de shell bash

Aqui está o que eu tentei:

#!/bin/bash

if [ $# -eq 2 ]; then
    if [[ "$1" = /* ]]
    then
    cd ./bin/x86_64/bin/ls
        if [ -d "$1" ]; then
            echo "ok"
            i="$1"
            echo $i
        else
            echo "error2"
            exit
        fi
    else
        echo "error"
        exit
    fi
fi
    
por user3334375 03.06.2015 / 12:24

3 respostas

6

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" ] ).

    
por 03.06.2015 / 12:27
0

Seu código funciona, se o diretório você cd existir de fato.

Eu mudei a linha cd para um diretório no meu sistema (diff):

-    cd ./bin/x86_64/bin/ls
+    cd /bin/

Em seguida, corri:

ry@~/Desktop:$ sh test /bin /
ok
/bin

Note que você deve alimentar seu script com dois argumentos por causa disso: if [ $# -eq 2 ]; then

Além disso, observe que ./bin/ é realmente o mesmo que bin/ .

    
por 04.06.2015 / 06:39
0

Para verificar se existe um diretório em um shell script, você pode usar o seguinte:

dir=$1

if [ -d "$dir" ]; then

 #means that $dir exists.

fi

para verificar o oposto, adicione! antes do -d - > [ ! -d ....]

    
por 14.11.2016 / 10:17