pipe道rrd到一个新的目录

我chrooted和耗尽驱动器空间,所以我回到主机驱动器有足够的空间,但似乎无法将输出的数据redirect到我的空驱动器

[root@localhost rra]# ls /mnt/maindrv/ cacti-0.8.8b cacti-0.8.8b.tar.gz cacti2.tar cactidb [root@localhost rra]# for i in `ls *.rrd`; do rrdtool dump $i > '/mnt/maindrv/'.$i.'xml'; done [root@localhost rra]# ls /mnt/maindrv/ cacti-0.8.8b cacti-0.8.8b.tar.gz cacti2.tar cactidb [root@localhost rra]# df -h /mnt/maindrv/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-home 97G 1.5G 96G 2% /mnt/maindrv 

如何正确输出我的转储/mnt/maindrv/

看来你在这里忽略了一些东西:

 for i in `ls *.rrd`; do rrdtool dump $i > '/mnt/maindrv/'.$i.'xml'; done 

在某些语言中. 用于连接variables,但在Bash中它是一个字面点。 例如,如果你有一个文件hello.rrd ,那么这个命令会把转储放在:

 /mnt/maindrv/.hello.rrd.xml 

由于文件以点开始,所以即使它在那里, ls /mnt/maindrv/也不会列出它。

另一件事,你不应该循环ls *.rrd而只是*.rrd 。 这与你的问题没有关系,而是一个不好的做法。

这应该做你所需要的,更干净,更好:

 for i in *.rrd; do rrdtool dump "$i" > "/mnt/maindrv/$i.xml"; done