Verifique se um arquivo ou pasta existe ou não (e mais) com o loop IF

Eu não coloquei nada de Bater, e é que quando estou entrando no maravilhoso mundo do Python, esqueci um pouco desse outro amigo que tanto me ajudou 🙂

Aqui coloco algo para os entusiastas do Bash, como o título diz ... Vou mostrar a vocês como verificar se existe ou não um arquivo ou pasta no sistema, apenas usando: if

Vamos criar um arquivo .sh e dar-lhe permissões de execução, para isso basta colocar o seguinte comando em um terminal:

toque test.sh && chmod + x test.sh

O que isso fez foi criar o arquivo (toque test.sh) e também dar a você permissões de execução (chmod + x test.sh)

Então vamos escrever o seguinte nele:

if [ -d /opt/ ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

O que isto?

Simples 😀

Na primeira linha - » if [-d / opt /];

Aqui nós perguntamos, o diretório / opt / existe? Sim diretório / pasta, porque o -d significa diretório ou pasta.
Então caso exista imprimiremos no terminal «Sim, existe.»(Esta é a linha 2 e 3)
Caso contrário, e / opt / NÃO existe, imprimiremos «Não, não existe»(Linhas 4 e 5)
Então, na última linha (número 6) fechamos o if e pronto.

Artigo relacionado:
Estabeleça a conexão de rede entre o PC e as máquinas virtuais Virtualbox

Faça o teste, ele mostrará que / opt / existe.

Se você quiser que eu mostre o outro texto (aquele que não existe), altere / opt / para qualquer outra pasta que não exista em seu sistema, por exemplo: / asd /

Como você pode ver, -d nos ajuda a saber se o diretório existe, bem agora se mudarmos -d para -f é para verificar a existência de arquivos (-d = diretório, -f = arquivo / arquivo)

Por exemplo:

if [ -f /etc/hosts ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

Aqui está a lista de opções:

-d - »Verifique se existe um determinado diretório

-f - »Verifique se um determinado arquivo existe

-w - »Verifique se um determinado arquivo tem permissão de gravação

-x - »Verifique se um determinado arquivo possui permissões de execução.

E bem, não há muito mais a acrescentar 🙂

Sei que isso será muito útil e interessante para quem gosta de programar em Bash 😉

lembranças


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Hugo dito

    Outra maneira de fazer isso sem se ... então ... outra forma:

    test -f /etc/hosts && elcomando

    Ou também

    test ! -f /etc/hosts && echo "no se encontró el archivo"

    Etc.

    1.    KZKG ^ Gaara dito

      Certo 😀
      … O_O… Você é Hugo, Hugo de Cuba? … Usando Windows8, WTF !!!

      1.    Hugo dito

        Bem, sim, estou me familiarizando com este sistema operacional e, para ser franco, a única coisa que achei útil é o gerenciador de cópias, caso contrário, pessoalmente o considero uma praga, especialmente sua interface híbrida e aplicativos Metro. Gosto menos do que do Vista e do 7 (embora um pouco mais eficiente do que esses), que também não gostei. A única coisa que estou usando é para jogar NFS13 e Skyrim, mas este sistema operacional está ocupando tanto espaço que tive que deletar minha partição Linux [snif].

        No entanto, para sua tranquilidade, posso dizer que anteontem baixei o ISO do Arch para janeiro e pretendo dar uma amostra de sua versão x86-64 assim que conseguir o repositório (você tem? Agora que eu vi que ele usa pacotes assinados por padrão, isso me dá mais confiança para mergulhar.

        E meu pai também me disse que me mandaria um Sony Xperia, do qual quero aproveitar para aprender um pouco de programação para Android, que era um desejo pendente. Então, acalme-se, eu ainda não fui para o lado negro da força, buahahahaha

  2.   Patz dito

    teste de homem

    1.    msx dito

      Claro.

  3.   RAW-Básico dito

    Wenas! ..

    Poderíamos fazer o mesmo .. ..mas o diretório é passado como parâmetro ..

    if [ -d $1 ];
    then
    echo "Sí, sí existe."
    else
    echo "No, no existe"
    fi

    E o chamamos de:

    ./test.sh / opt /

    Cumprimento..

  4.   Savo dito

    IF não é um ciclo xD

  5.   Gregório Espadas dito

    Isso se encaixa em mim como uma luva para um script que estou fazendo. É válido usar curingas? Por exemplo, para saber se existe algum .mp4, execute algo sobre ele.

    if [-f * .mp4];
    ...

    1.    RAW-Básico dito

      Sim, é totalmente válido ..

      Mesmo através de parâmetros .. "* .mp4"

      1.    RAW-Básico dito

        Por exemplo

        if [ -f $1 ];
        then
        rm -r $1
        else
        ls
        fi

        Se você o chamar de: ./test.sh * .mp4

        Se encontrar arquivos .mp4, ele os apaga ... ... mas não lista os arquivos nesse diretório ...

        1.    Gregório Espadas dito

          Obrigado pelo feedback e dicas! 🙂

        2.    Joaquin dito

          Você perdeu o f xD

          rm -rf $ 1

          Isso é mais emocionante!

        3.    b1tblu3 dito

          Maravilhoso !!!, A cada dia me apaixono mais pelo Linux, o Windows foi relegado para algum canto escuro do meu Disco Rígido, que está prestes a ser apagado para dar lugar à luz do Linux.

          1.    RAW-Básico dito

            Excelente! .. .. então dê o próximo passo .. e tire-o ..

            6 meses atrás, aprox. Tenho apenas GNU / Linux em todas as minhas máquinas e não preciso de mais .. ..não de W $ .. ou Wine .. ..e estou mais do que feliz assim .. 😉

            E estou infectando meu entorno .. já que todos me veem com meu Arch, rápido, eficiente e feliz .. ..e me pedem para instalar o Linux .. .. sim! .. 😀

        4.    Inukaze dito

          Você também pode verificá-los para várias extensões, você pode usar algo como

          #! / Bin / bash
          Diretório = $ HOME / Downloads

          if [$ Directory]; então
          echo "Aqui está uma lista de tipos de arquivo:"
          echo "mp1, mp2, mp3, mp4, wav, flac, flaad, aud, midi"
          ls {* .mp ?, *. wav, *. fla, *. aud * .midi}
          fi

          usar {} permite que você especifique várias extensões neste caso, o uso de "?" , é um caractere curinga, que permite escolher "Qualquer caractere".

          Eu espero que você aprenda

        5.    pedro dito

          Eu recomendo o comando find [diretório] [search_pattern] –exec [command] {} \

      2.    Carlos dito

        Não funciona, coloco estes arquivos no diretório:
        AB20160420.TXT
        AB20160421.TXT
        AB20160422.TXT
        AB20160423.TXT
        AB20160424.TXT
        AB20160425.TXT
        search.sh

        #! / Bin / bash
        CAMINHO = / tmp / TESTE
        cd $ ROUTE
        ls -la | awk '{imprimir »« $ 9}'
        if [[-f AB.TXT]]; então
        echo »Insira o IF se houver AB
        .TXT "
        fi
        if [-f AB20160422.TXT]; então
        echo "entrada para um arquivo AB específico"
        fi

        quando coloco [-f AB.TXT] dá erro
        quando coloco [[-f AB
        .TXT]] não dá um erro, mas não pode encontrar o arquivo
        só funciona quando coloco um arquivo específico, por exemplo:
        if [-f AB20160422.TXT]; então

        Não consigo fazer funcionar com caracteres curinga * ou?

        1.    pedro dito

          #! / usr / bin / env bash
          #.codificação = utf-8.

          CONTSTANTES

          EXIT_OK = 0
          EXIT_BAD = 66

          BOLD = »\ 033 [1m»
          NC = »\ 033 [0m»
          VERMELHO = »\ 033 [31m»

          E se [! "$ 1"];
          então
          echo "faltando um parâmetro"
          saia $ EXIT_BAD
          fi

          cd "$ 1"

          arquivos = »ls -h1 $ 1»

          para arquivo em $ ($ files); Faz
          echo -e "você pode fazer qualquer coisa com $ BOLD $ file $ nc aqui"
          feito

          saia $ EXIT_OK

  6.   msx dito

    @KZ, fale mais sobre isso: "e isso porque estou entrando no maravilhoso mundo do Python"!

    1.    KZKG ^ Gaara dito

      HAHAHAHA nah ... pouco a pouco 🙂
      Ainda sou um novato em Python, mal tenho tempo para dedicar horas e horas a ele, então sou lento sim, lento, mas seguro no meu aprendizado 😀

  7.   audoban dito

    Muito obrigado 😀 ontem eu estava pensando em como fazer isso.

  8.   reichsk dito

    isso com ncurses é ótimo 🙂

  9.   Jazeco dito

    em 1 palavra… EXCELENTE!
    Por muito tempo fui aperfeiçoando um script para fazer downloads da Internet, mas me deparei com o problema de baixar os arquivos que solicitei 1 e novamente sem conseguir verificar a existência 1ro.
    Muito bom tuto.

  10.   Zulan dito

    Grande contribuição, aqui do Chile é apreciada.
    Cada dia mais LINUX me surpreende agradavelmente,
    Viva o Software Livre MIERDAAAA.

  11.   david dito

    serve para
    verifique se um arquivo é de um diretório

  12.   groveher dito

    Se eu quiser verificar a existência de algum arquivo em um caminho «/ tmp / receivers», execute algum comando, como seria?

    estarei muito grato

    lembranças

  13.   banheiro dito

    Prezado, e para determinar por IF se o arquivo está totalmente preenchido ???. Peço isso porque quando você está preenchendo o arquivo para uma transmissão, pode levar até com metade dos dados.

    Saudações e obrigado pela sua resposta.

  14.   Inukaze dito

    Bem, eu acho que você também deve adicionar um exemplo, como "Verifique se não há" um "arquivo" ou "diretório" como por exemplo

    para verificar se NÃO existe, por exemplo, use uma variável->

    Um diretório

    #! / Bin / bash
    Diretório = »$ HOME / Diretório de teste»
    Arquivo = »$ HOME / Arquivo de teste»

    E se [! -d "$ Directory"]; então
    echo "Não há $ Directory"
    echo "Criando ->" $ Directory "
    mkdir "$ Directory"
    outro
    echo "Directory" $ Directory "já existe
    fi

    E se [! -d "$ Arquivo"]; então
    echo "Não há $ File"
    echo "Criando ->" $ File "
    toque em "$ File"
    outro
    echo "Arquivo" $ File "já existe
    fi

    1.    Katekyo dito

      quando você fizer o mkdir verifique mais tarde se o terminal conseguiu criá-lo porque ele pode quebrar as bolas se for uma pasta como root ou sistema hhah

  15.   Julius Vinachi dito

    Saudações KZKG ^ Gaara uma consulta como eu faria para usar o curl. Gostaria de saber como posso fazer ping em uma url do console para ver se está disponível, por exemplo http://portal.com/directorio/archivo1.php Onde o arquivo1 vai armazenar os IPs da visita, é para monitorar uma equipe que preciso fazer aquele pin a cada meia hora para que eu fique sabendo do IP público pois muda de vez em quando e não consigo conectar por ssh.

    Saudações, obrigado antecipadamente Deus os abençoe.

    1.    KZKG ^ Gaara dito

      Olá,

      Primeiro, você deve dizer que a variável IP (por exemplo) é o conteúdo desse arquivo, para isso você deve:
      1. Baixe o arquivo
      2. Visualize seu conteúdo e obtenha o IP de lá
      3. Esse IP é a variável

      Por exemplo:
      Aqui nós baixamos o arquivo - »wget http://portal.com/directorio/archivo1.php -o arquivo.html
      Em seguida, atribuímos seu conteúdo a uma variável: - »: $ {IP: =` cat file.html`}
      .. assumindo que o conteúdo desse arquivo tem apenas o IP, senão teria que trabalhar com grep, awk ou head.

      Uma vez que você já tem o IP como variável, o resto é a coisa mais simples do mundo 🙂

      Se quiser, escreva para mim por e-mail (kzkggaara[at]desdelinux[ponto]net) Terei prazer em ajudá-lo

      1.    Julius Vinachi dito

        Muito obrigado kzkggaara muito grato.

  16.   Natália dito

    Olá, não entendo muito de informática e não sei se este post tem a ver com o problema que tenho.

    Comento caso você me leia, embora a postagem seja de um ano atrás:
    Acontece que criei uma pasta na minha área de trabalho para armazenar alguns vídeos. Bem, apaguei esses vídeos porque não precisava mais deles e agora essa pasta me diz que eles não existem (embora estejam visíveis na minha área de trabalho).

    - Esse é o primeiro problema que tenho:
    Não consigo excluir a pasta.

    - Segundo problema e acho mais importante:
    Na tentativa de excluir a pasta, coloquei uma pasta PHOTOS. Agora quando abro a pasta que "não existe" ela está vazia e as FOTOS não estão lá.

    Como posso recuperar as fotos? Dei a opção dentro da pasta "Mostrar documentos ocultos", mas a pasta FOTOS não aparece.

    Espero que você saiba como isso é resolvido.
    Obrigado.

    1.    valdo dito

      Existem dois usuários que são os principais: root e your_user (natalia por exemplo). Ambos têm pastas pessoais. seu_usuário em / home e root em / (diretório raiz). Ao clicar com o botão direito na pasta, veja a quem ela pertence. Se for root com seu gerenciador de arquivos usando sudo ou gksu ou kdesu, dependendo do ambiente que você usa, vá para o diretório raiz -> root -> Desktop e provavelmente encontrará as fotos e poderá excluir a pasta. Algumas distros, quando você não é o proprietário do arquivo ou diretório e não tem permissões de acesso, informam que o diretório / arquivo não existe. Se você é o proprietário e não é root, faça o mesmo com o gerenciador de arquivos com sudo, etc e vá para o diretório raiz -> / home -> pasta_pessoal -> Desktop e veja se as fotos estão lá e se você pode excluir a pasta.
      Se isso não funcionar, você terá que ver outras opções do terminal (console).

  17.   Pedro Manuel Aguayo Munoz dito

    Oi como você está?

    #! / Bin / bash
    ler rota
    #Enter ~ / Desktop
    #Então tento navegar nesse diretório
    cd $ path
    # Recebo a seguinte mensagem bash: cd: ~ / Desktop: O arquivo ou diretório não existe

    Minha pergunta é: o que posso fazer para inseri-lo no teclado e tomá-lo como um caminho de diretório?

  18.   Miguel dito

    E como posso saber se existe um grupo,

  19.   heidi dito

    bom estou com um problema no meu canaima quando pressiono o botão cunaguaro ele diz que não existe nenhum arquivo ou diretório como faria para resolver esse problema e o resto não abre o cunaguaro por favor obrigado.

  20.   Carlos dito

    Como você faz if no BASH se o nome do arquivo contém espaços?
    Por exemplo:
    Dados de abril.xlsx

    Para perguntar se o arquivo existe

    1.    Manuel Alcocer Jimenez dito

      Carlos, assim:

      if [["$ variable" == Data \ month \ of \ April.xlsx]]; então echo 'match'; fi

      Você também pode:
      if [["$ variable" == 'Dados para o mês de abril.xlsx']]; então echo 'match'; fi

      Outra opção:
      [["$ Variable" == 'Dados para abril.xlsx']] && echo 'corresponde' || echo 'não corresponde'

      Em algumas áreas escuras da Internet, eles recomendam usar [[]] em vez de [], e se você for comparar números, então: ((variável> = 3)) && echo 'variável é maior ou igual a 3' | | echo 'variável é menor que 3'

      Portanto, para números:

      if ((número! = 4)); então echo "$ {number} não é 4"; else echo "$ {number} é 4"; fi

  21.   Cesar mateus dito

    Como fazer um código para validar se o diretório possui um texto específico, para poder editá-lo.

    exemplo:

    if (text1)

    não fazer nada

    outro

    mudar texto1 para texto2

  22.   Miguel dito

    uma dúvida, como seria verificar a cada 15 segundos se o arquivo existe ou não, obrigado.

  23.   margem do rio dito

    Olá,
    esta:
    if [-w / home / Komun / Logs / ti]; então
    Descubra se o arquivo é gravável. Mas é baseado nas permissões do usuário. Isso pode ser feito para descobrir se o grupo ou os outros têm permissões?