我的需求是将“主”文件夹的所有文件和文件夹复制到所有已安装的 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
,这会因文件名而引发错误。
那么,我该如何解决这个问题?有一种方法可以将$file
var 中的所有空格替换为\
?
答案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 ...
本身就非常强大的语法。