1

所以我试图复制一个文件(尼古拉斯凯奇的照片,不要问),以便它替换一个完整的 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 在这种情况下,一切都是文件?

谢谢!

4

1 回答 1

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 *),或者更好,只是*为了避免不必要的 subshel​​l 调用

于 2013-03-31T23:15:48.753 回答