所以我试图复制一个文件(尼古拉斯凯奇的照片,不要问),以便它替换一个完整的 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 在这种情况下,一切都是文件?
谢谢!
您使用的语法不正确。以下命令
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 *)
,或者更好,只是*
为了避免不必要的 subshell 调用