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.