Creative Saplings

Como verificar corretamente se o arquivo existe no Bash ou Shell (com exemplos)

Fevereiro 13, 2021
No Comments

Índice

Neste tutorial, abordarei os diferentes atributos que você pode usar em bash ou shell scripting para verificar arquivos e diretórios. Você pode usar expressões condicionais bash com ] ou usar teste com para verificar se o arquivo existe.

Vamos use o operador bash if e else para todos os exemplos, então recomendo que você leia: Guia de uso do Bash if else para iniciantes

1. Bash / Shell: Verifique se o arquivo existe e é um arquivo normal

Esta seção mostra os exemplos para verificar se o arquivo regular existe no bash.

1.1: Método 1: Usando colchetes simples ou duplos

Usando colchetes duplos ]

#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

Usando colchetes simples

#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

1.2: Método 2: Usando o comando de teste

O comando test é usado para verificar os tipos de arquivo e comparar valores.

#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi

1.3: Método 3: Linha única

Podemos usar colchetes simples ou duplos aqui neste exemplo. Eu recomendaria sempre usar colchetes duplos ao escrever um código de linha no shell, pois isso minimiza o risco de receber avisos no console quando ocorre a divisão de palavras.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"

A instrução após && será executada se SUCESSO. Se a primeira condição retornar FALSO, a instrução com || será executada.

Da mesma forma, use o comando de teste para verificar se o arquivo regular existe no bash ou shell script em uma única linha .

#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"

2. Bash / Shell: Verifique se o arquivo existe (está vazio ou não)

Para verificar se o arquivo existe e se estiver vazio ou se tiver algum conteúdo, usamos o atributo “-s”

2.1: Método 1: Usando colchetes simples ou duplos

Verifique se o arquivo existe e está vazio ou vazio usando colchetes duplos ]

#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

Verifique se o arquivo existe e está vazio ou não está vazio usando colchetes duplos

if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

2.2: Método 2: Usando o comando de teste

Usando o comando de teste, combinamos o -s atributo para verificar se o arquivo existe e está vazio ou tem algum conteúdo:

2.3: Método 3: Linha única

Podemos usar colchetes duplos ou simples para esse liner, mas como eu disse antes, recomendo o uso de colchetes duplos.

#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

Da mesma forma, com o comando de teste, podemos usar && e || operador para verificar o arquivo em um comando de linha única dentro de nosso script de shell.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

3. Bash / Shell: Verifique se o diretório existe

Espero que você saiba que no Linux tudo é um arquivo. Dessa forma, um diretório também é considerado um arquivo. Podemos usar o atributo “-d” para verificar se existe um diretório na programação do shell.

3.1: Método 1: Usando colchetes duplos ou simples

Podemos usar o atributo -d em ou colchetes duplos ] para verificar se o diretório existir.

#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

Da mesma forma, usamos colchetes simples neste exemplo para verificar se o diretório está predefinido no shell script.

#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.2: Método 2: Usando o comando de teste

Neste exemplo, usaremos o comando de teste para ter certeza se o diretório está presente ou não antes de realizarmos determinada tarefa.

#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.3: Método 3: Linha única

Neste exemplo, usaremos colchetes simples e duplos em forma de linha única para verificar para o diretório. A instrução após o operador && será executada se a primeira condição for TRUE e se for FALSE, a instrução da || condição “será executada .

#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"

Eu recomendaria usar ] em vez de para esses códigos de linha na programação do shell.

Da mesma forma com && e ||, podemos usar o comando de teste para verificar se o diretório existe

#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"

4. Bash / Shell: Verifique se o diretório existe (vazio ou não vazio)

Não há atributos de shell como usei em todos os outros exemplos e cenários neste tutorial. Mas temos alguns hacks que podemos usar para verificar se o diretório está vazio ou não vazio.

4.1: Método 1: Listar o conteúdo do diretório e verificar

Neste exemplo, listaremos o conteúdo do diretório, suprimiremos a saída e, com base no código de saída, verificaremos se o diretório está vazio ou contém algum content

#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi

Também podemos reverter isso colocando uma condição NOT (!). Portanto, seria semelhante a:

#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

A saída seria a mesma em ambos os scripts de exemplo.

4.2: Método 2: Usando comando find

Podemos usar o comando find e então suprimir a saída para verificar se o diretório de destino tem algum conteúdo ou não.

#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

4.3: Método 3: Listar o conteúdo

Novamente como eu disse, uma vez que não há uma maneira fácil de verificar se um diretório está vazio ou não usando alguns atributos, iremos listar o conteúdo do diretório. Se você não obtiver nenhuma saída, o diretório está vazio ou então não está vazio

#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

5. Bash / Shell: Lista de atributos para o arquivo de teste

Da mesma forma, existem muitos outros atributos que você pode usar com scripts de shell para verificar diferentes tipos de arquivo, como links simbólicos, permissões de arquivo etc.

Atributos O que faz?
-a FILE Verdadeiro se FILE existe
-b FILE Verdadeiro se FILE existe e é um arquivo especial de bloco.
-c FILE Verdadeiro se FILE existe e é um arquivo especial de caractere.
-d FILE Verdadeiro se FILE existe e é um diretório.
Verdadeiro se FILE existir
-f FILE Verdadeiro se FILE existe e é um arquivo normal
-g FILE Verdadeiro se FILE existir e seu bit set-group-id estiver definido
-h FILE Verdadeiro se FILE existe e é um link simbólico
-k FILE Verdadeiro se FILE existe e seu bit “aderente” está definido
-p FILE Verdadeiro se FILE existe e é um tubo nomeado (FIFO)
-r FILE Verdadeiro se FILE existe e é legível
-s FILE Verdadeiro se FILE existe e tem um tamanho maior que zero
-u FILE Verdadeiro se FILE existir e seu bit set-user-id estiver definido
-w FILE Verdadeiro se FILE existe e é gravável
-x FILE Verdadeiro se FILE existe e é executável
-G FILE Verdadeiro se FILE existe e pertence ao ID de grupo efetivo
-L FILE Verdadeiro se FILE existe e é um link simbólico
-N FILE Verdadeiro se FILE existe e foi modificado desde a última leitura
-o FILE Verdadeiro se FILE existe e é propriedade do efetivo ID do usuário
-S FILE Verdadeiro se FILE existir e é um soquete
Verdadeiro se FILE1 e FILE2 referem-se ao mesmo dispositivo e números de inode
FILE1 -nt FILE2 Verdadeiro se FILE1 for mais recente (de acordo com a data de modificação) do que FILE2, ou se FILE1 existir e FILE2 existir não
FILE1 -ot FILE2 Verdadeiro se FILE1 for mais antigo do que FILE2 ou se FILE2 existir e FILE1 não

Conclusão

Articles
Previous Post

Como dizer que você é bem-vindo em francês

Next Post

Como configurar o acesso remoto e se conectar a uma instância remota do SQL Server com ferramentas ApexSQL

Deixe uma resposta Cancelar resposta

Artigos recentes

  • As melhores escolas de fotografia do mundo, 2020
  • Cidadãos soberanos levam sua filosofia antigovernamental para as estradas
  • Guia de custos de reparo de estuque
  • Muckrakers (Português)
  • Oncologia de precisão

Arquivo

  • Fevereiro 2021
  • Janeiro 2021
  • Dezembro 2020
  • Novembro 2020
  • Outubro 2020
  • Setembro 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.