Diretórios de listagem de scripts básicos (operador [: discover: unexpected)

1

Encontrei um problema ao executar um script básico listando diretórios.

for item in *
do
   if [ -d $item ]
   then
      echo $item
   fi
done

O resultado:

  1. lista todas as pastas do sistema
  2. retorna um erro: for.sh: 4: [: discover: operator inesperado
  3. lista todas as minhas pastas, cujos nomes começam com um caractere minúsculo

Meu palpite é -d encontra algum problema com um caractere minúsculo inicial? Alguém pode por favor explicar por que isso acontece? Muito obrigado antecipadamente.

    
por denuviel 31.07.2013 / 06:07

2 respostas

0

Alguns diretórios / arquivos podem conter espaços em seus nomes, isso causaria o erro que você está recebendo. Então use aspas:

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done

se você quiser que eles sejam classificados em ordem alfabética

for item in *
do
   if [ -d "$item" ]
   then
      echo "$item"
   fi
done | sort

Como exemplo do problema, suponha que um arquivo seja chamado de My File . Se você não usa aspas que você obteria (após a expansão do bash)

if [ -d My File ]

então é como "Teste: é My um diretório? Do File ", mas File não é um operador test válido, portanto, o erro.

    
por edwin 31.07.2013 / 07:16
0

O seguinte ecoa todos os dirs no diretório atual (mas não os pontilhados, por exemplo, .git )

#!/bin/bash

find . -maxdepth 1 -mindepth 1 -type d | while read Directory; do
    echo "$Directory";
done
    
por Adobe 31.07.2013 / 06:30