如何 cd 到路径中有两个点的文件夹

如何 cd 到路径中有两个点的文件夹

我正在删除 CentOS 服务器上一些经病毒扫描认为已被感染的文件。

其中两个文件的路径中有“..”。我理解这通常..是我们导航到父目录的方式。在这种情况下,这两个点似乎是实际路径的一部分。

例如,如果文件的路径是:

/var/lib/mysql/mysql/..\bin\cna12.dll

然后我可以 cd 到:

/var/lib/mysql/mysql/

如果我随后输入 cd 并按两次 Tab,系统将为我提供自动完成多个选项的选项。其中一个选项是:

..\bin\cna12.dll

在粘贴的文本中查看它(请注意第一列):

..\bin\cna12.dll                    help_topic.frm                      slow_log.CSV
columns_priv.frm                    help_topic.MYD                      slow_log.frm
columns_priv.MYD                    help_topic.MYI                      tables_priv.frm

通常我可以输入自动完成建议的几个字符,然后再次按下 Tab 键即可完成自动完成……但我似乎无法选择它来完成自动完成。

我所做的一切似乎都不起作用。包括将其放在引号中,例如:

cd "..\bin\"

请注意,Linux 的斜杠是这样的“/”,而上面引用的斜杠是 Windows 风格的“\”。

我如何通过 cd 进入 bin 目录以便可以删除该 .dll 文件?

答案1

我不相信那是一个实际的目录,我怀疑那只是一个带有反斜杠的文件。尝试直接删除该文件,它应该会被删除。

这将起作用:rm '..\lib\plugin\amd.dll'

我也不确定cdCentOS 系统上的智能程度,它可能只显示目录的自动完成选项。您必须在其中执行此操作(假设它是空的)。您可以通过在目录中rmdir '..\lib\plugin\amd.dll'运行并查看它是文件还是目录来确定这一点,然后相应地发出正确的命令。ls -l/var/lib/mysql/mysql/

在 Linux 系统上,反斜杠仅被视为文件名中的字符,而不是目录分隔符。因此,在目录上下文中使用它们时没有特殊区别。反斜杠通常用作特殊字符的转义字符。

答案2

有两个问题。您没有在自动完成之前说明您正在输入的内容,这使事情变得复杂,并且您的行为就像那是另一个目录中的文件一样,但事实并非如此 - 反斜杠不是 unix 中的路径分隔符,正如您所指出的,它们只是文件名中的字符。

至于第二个,不要再尝试了cd。不管你怎么做,Shell 都不会自动将文件名补全为cd,因为它不是目录。文件在.,就是rm它。

对于第一个问题,你不能只需键入..即可自动完成,因为这不是明确的匹配(目录还包含..,因为它必须包含)。您不能只键入..\即可自动完成,因为反斜杠是一个转义其后跟的元字符,而 shell 不知道那是什么 - 它可能是任何东西,也可能什么也不是。但是,如果您键入

rm ..\\

然后点击TAB(假设这是 bash),文件名应该会正确填写。我刚刚试过了,它对我有用(Fedora 22 下的 bash 4.3.42(1))。

答案3

它是一个符号链接(Symbolic Link)。

如果运行命令:ls -l amd.dll

你会看到类似这样的内容:

lrwxrwxrwx 1 root root 14 2013 年 9 月 22 日 amd.dll -> ..\lib\plugin\amd.dll

这意味着实际文件位于此处:

/var/lib/mysql/lib/插件/amd.dll

答案4

如果它确实是一个目录,请尝试发出cd '..\lib\plugin\amd.dll'(请注意单引号,而不是双引号)

如果它是一个文件,则使用rm '..\lib\plugin\amd.dll'(再次注意单引号)

相关内容