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

Jac*_*tis 5 linux

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

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

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

/var/lib/mysql/mysql/..\bin\cna12.dll
Run Code Online (Sandbox Code Playgroud)

然后我可以 cd 到:

/var/lib/mysql/mysql/
Run Code Online (Sandbox Code Playgroud)

如果我然后键入 cd 并按两次 Tab,我将获得自动完成多个选项的选项。选项之一是:

..\bin\cna12.dll
Run Code Online (Sandbox Code Playgroud)

在这个粘贴的文本中看到它(在第一列中注意它):

..\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
Run Code Online (Sandbox Code Playgroud)

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

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

cd "..\bin\"
Run Code Online (Sandbox Code Playgroud)

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

我如何 cd 到 bin 目录,以便我可以删除该 .dll 文件?

小智 9

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

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

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

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


Mad*_*ter 8

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

至于第二个,停止尝试cdcd无论您做什么,Shell 都不会将该文件名自动补全到,因为它不是目录。文件在.,只是rm它。

至于第一个,您不能只键入..自动完成,因为这不是一个明确的匹配(目录也包含..,因为它必须)。你不能只输入..\自动完成,因为反斜杠是一个元字符,它会转义后面的字符,而 shell 不知道那是什么——它可以是任何东西,也可以什么都没有。但是,如果您键入

rm ..\\
Run Code Online (Sandbox Code Playgroud)

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