如何在 Linux 中将名称中带有 $(美元符号)的文件从一个文件夹复制到另一个文件夹?

如何在 Linux 中将名称中带有 $(美元符号)的文件从一个文件夹复制到另一个文件夹?

我有一个文件,想将其从一个目录复制到另一个目录。

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

你需要逃脱任何带反斜杠的特殊字符\

cp -r \$somefile.class /folder2

阅读更多内容逃跑这里:

在 sh 脚本中使用 sed 时需要转义哪些字符?

答案3

字符$用于表示 shell 变量。如果您的文件确实以 开头,$则应使用单引号来阻止 shell 尝试将其评估为变量:

cp -r '$somefile.class' /folder2

答案4

如果特殊字符-在前面,这些解决方案对我都不起作用。在这种情况下,唯一对我有用的就是将当前目录放在前面,如下所示:

cp -r './-somefile.class' /folder2

虽然这不是$符号,但它是一个特殊字符,可能会对其他人有所帮助。其他解决方案不起作用,例如在文件名前面加上 \ 或在文件名周围加上单重或双重强调。

相关内容