所以我试图复制一个文件(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在这个例子中,一切都是文件?
谢谢!
答案 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调用