Alguns problemas:
-
]
indica o final dos argumentos para[
(test
) e deve ser o último argumento; você tem um par de]
s, o que está errado; presumivelmente você pretendia usar:if [ $( file -b $i ) == "directory" ]
-
Se você tivesse usado o acima, obteria
bash: [: too many arguments
, porque a divisão de palavras seria feita na saída da expansão de variável ($i
) e, em seguida, a substituição de comando,$()
(file
command ) e[
verá várias palavras antes de=
, levando à mensagem de erro. Você precisa citar a expansão da variável e a substituição de comandos:[ "$(file -b "$1")" == "directory" ]
Como observação, você deve usar o bash
keyword [[
, em vez de [
, pois o primeiro lidará com a divisão de palavras (e a expansão do nome do caminho) para você.