复制文件时出现空格错误

复制文件时出现空格错误

我的需求是将“主”文件夹的所有文件和文件夹复制到所有已安装的 USB 密钥中。

因此,我写了这段代码:

for usb_key in `ls /media/`;
    do
        for file in `ls -a /home/daniele/USB/MASTER`;
            do
                cp /home/daniele/USB/MASTER/"$file" /media/$usb_key/"$file"
            done;
    done;

for usb_key in `ls /media`;
    do
        umount /media/$usb_key
    done;
#alert me that the work is done
totem /home/daniele/USB/0016.mp3 &
exit

但是,如果我有一个名为“DO NOT DELETE”的文件夹/home/daniele/USB/MASTER,这会因文件名而引发错误。

那么,我该如何解决这个问题?有一种方法可以将$filevar 中的所有空格替换为\

答案1

那这个呢?我不知道为什么你必须迭代每个文件,为什么你不能只复制全部内容...但这应该比解析ls输出的效果更好一些。

for usb_key in /media/*;
do
    cp -Ra /home/daniele/USB/MASTER/* $usb_key
    umount /media/$usb_key
done;

#alert me that the work is done
totem /home/daniele/USB/0016.mp3 &
exit

只是为了解释一下发生了什么,在解析外部输入时,所有空格都会中断(就像您的代码一样)。您可以通过转到包含间隔文件的目录并运行来查看操作:

for file in `ls -1`; do echo $file; done

在我的电视目录中,我看到如下输出:

The
Big
Bang
Theory
The
Cleveland
Show
The

我认为有一种方法可以改变中断序列,但使用 bash 的原生文件查找语法更简单。或者使用find ... -exec ...本身就非常强大的语法。

相关内容