我有一个文件,想将其从一个目录复制到另一个目录。
some.txt
假设这是要从文件夹 1 复制到文件夹 2 的文件
cp -r some.txt /folder2
我可以复制此文件,但如果文件名以$
类似名称开头$somefile.class
,则我无法复制该文件,只会出现文件不存在错误
cp -r $somefile.class /folder2
答案1
首先,你不需要这个-r
标志(来自man cp
):
-R
,,-r
递归--recursive
复制目录
这仅在复制整个目录及其内容时有用。然后,每当您的文件名包含奇怪的字符时,您都需要对其进行转义或使用单引号保护它们,正如其他答案已经建议的那样:
cp '$somefile.class' /folder2
cp \$somefile.class /folder2
或者,你可以使用 shell 的 glob 扩展功能来复制文件:
cp ?somefile.class /folder2
cp *somefile.class /folder2
匹配?
“任何单个字符”和*
匹配“0 个或多个字符”。因此,使用这些通配符将允许您复制目标文件而不必担心名称。但是,请记住,您应该谨慎使用,并确保通配符仅有的匹配要复制的文件。例如,我使用的也会匹配Lsomefile.class
。
答案2
答案3
字符$
用于表示 shell 变量。如果您的文件确实以 开头,$
则应使用单引号来阻止 shell 尝试将其评估为变量:
cp -r '$somefile.class' /folder2
答案4
如果特殊字符-
在前面,这些解决方案对我都不起作用。在这种情况下,唯一对我有用的就是将当前目录放在前面,如下所示:
cp -r './-somefile.class' /folder2
虽然这不是$
符号,但它是一个特殊字符,可能会对其他人有所帮助。其他解决方案不起作用,例如在文件名前面加上 \ 或在文件名周围加上单重或双重强调。