将单个文件复制到多个目标时,“目标不是目录”

时间:2013-03-31 22:58:19

标签: linux bash

所以我试图复制一个文件(Nicholas Cage的图片,不要问),这样它就会取代整个phpBB用户头像的文件夹(几乎是4月1日!)。但是,我得到了这样的答复:

joe@yada:~/upload$ for i in "ls *"; do cp ~/cage.jpg $i; done
cp: target `0e88f82965461cc1b418ddfda60935c8_99.jpg' is not a directory

如何告诉cp在这个例子中,一切都是文件?

谢谢!

1 个答案:

答案 0 :(得分:2)

您使用的语法不正确。以下命令

for i in "ls *"

使用bash通配符扩展,将实际字符串转换为

for i in "ls file1 file2 dir1 so_on 0e88f82965461cc1b418ddfda60935c8_99.jpg"

并将该字符串值分配给i

下一个cp尝试执行

cp ~/cage.jpg ls file1 file2 dir1 so_on 0e88f82965461cc1b418ddfda60935c8_99.jpg

并且在检查是否有任何输入文件无效之前,它会检查目标是否是目录,而不是错误。

要更正它,请将"ls *"更改为$(ls *),或者更好,只更改*以避免不必要的子shell调用