Sem procurar muito no inotifywait bit do seu código, parece que a parte interna do loop toca um arquivo com base no que está na variável name :
for name in /home/imp/imp/msgs/*.MIX; do
touch "${name}.BRD"
done
O valor de $name será um nome de caminho com um nome de arquivo no final que tenha o sufixo .MIX do nome do arquivo.
Tocar em $name.BRD criará um arquivo com um sufixo .MIX.BRD de nome de arquivo, enquanto acredito que você pode querer que o sufixo .MIX original seja substituído por .BRD .
Isso faz isso:
for name in /home/imp/imp/msgs/*.MIX; do
touch "${name%.MIX}.BRD"
done
${name%.MIX} remove .MIX do final do valor de $name .
O código provavelmente também não possui um | no final do comando inotifywait , para poder alimentar sua saída no loop while read :
#!/bin/sh
inotifywait --daemon --outfile /home/imp/imp/test.log -m /home/imp/imp/msgs -e create |
while read path action file; do
printf 'The file "%s" appeared in directory "%s" via "%s"\n' "$file" "$path" "$action"
for name in "$path"/*.MIX; do
touch "${name%.MIX}.BRD"
done
done
Aqui, também tomei a liberdade de alterar o echo para um printf (como é a saída de dados variáveis) e de usar $path no loop for interno, que espero esteja correto . O código não usa nenhum recurso bash especial, então eu mudei o shell para /bin/sh também.
Dependendo de como o inotifywait funciona e o que é $file e o que você deseja fazer, pode ser suficiente tocar em um arquivo baseado em $file , em vez de percorrer todos os arquivos no diretório.