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,$()(filecommand ) 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ê.