Parece que você ignorou algo aqui:
for i in 'ls *.rrd'; do rrdtool dump $i > '/mnt/maindrv/'.$i.'xml'; done
Em alguns idiomas o .
é usado para concatenar variáveis, mas no Bash é um ponto literal.
Por exemplo, se você tiver um arquivo hello.rrd
, o comando colocará o despejo em:
/mnt/maindrv/.hello.rrd.xml
Como o arquivo começa com um ponto, ls /mnt/maindrv/
não o listará, mesmo que esteja lá.
Outra coisa, você não deve percorrer ls *.rrd
, mas simplesmente *.rrd
.
Isso não está relacionado à sua pergunta, mas a uma prática ruim.
Isso deve fazer o que você precisa, mais limpo e melhor:
for i in *.rrd; do rrdtool dump "$i" > "/mnt/maindrv/$i.xml"; done