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

use*_*265 5 linux terminal file-transfer

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

假设这是some.txt要从文件夹 1复制到文件夹 2 的文件

cp -r some.txt /folder2
Run Code Online (Sandbox Code Playgroud)

我可以复制这个文件,但是如果文件名以$like开头,$somefile.class那么我就无法复制该文件,只是获取文件不存在错误

cp -r $somefile.class /folder2
Run Code Online (Sandbox Code Playgroud)

ter*_*don 15

首先,您不需要-r(from man cp)的标志:

-R, -r,--recursive
        递归复制目录

这仅在复制整个目录及其内容时有用。然后,每当您的文件名包含奇怪的字符时,您需要对它们进行转义或用单引号保护它们,因为其他答案已经建议:

cp '$somefile.class' /folder2
cp \$somefile.class /folder2
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用 shell 的 glob 扩展功能来复制文件:

cp ?somefile.class /folder2
cp *somefile.class /folder2
Run Code Online (Sandbox Code Playgroud)

所述?匹配“的任何单个字符”和*匹配“0个或多个字符”。因此,使用这些 glob 将允许您复制目标文件而无需担心名称。但是,请记住,您应该谨慎使用它并确保 glob与您要复制的文件匹配。例如,我使用的那些也会匹配Lsomefile.class.


phu*_*clv 9

您需要使用反斜杠转义任何特殊字符\

cp -r \$somefile.class /folder2
Run Code Online (Sandbox Code Playgroud)

在此处阅读有关转义的更多信息:

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


Mur*_*nik 8

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

cp -r '$somefile.class' /folder2
Run Code Online (Sandbox Code Playgroud)