由于这些字符很可能是国际字符,因此它们很可能在您的en_US字符集中显示为控制代码,这就是ls将它们显示为问号的原因。
这可能是由于您的分布默认情况下在全局配置文件中选择了别名ls。例如:
alias ls='ls -q'
您可以通过在shell中输入以下内容来查看您的发行版是否已完成:
alias ls
它将打印出如下内容:
$ alias ls
alias ls='ls --color=auto'
下面链接的页面建议,如果您执行“ ls -b”,则将看到八进制控制代码,因此您至少知道正在使用哪些字符。
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
假设这行不通,您还会在底部附近提到另一个选择:
直到现在我还没有意识到的工具OctalDump(在Debian上-/ usr / bin / od)
$ ls | od -b
将为您显示控制代码的八进制形式。
$ ls | od -c
将向您显示字符,包括可能在结尾处包含任何隐藏的其他空格(请在示例中注意结尾处的多余空格)
一旦知道正在使用哪些控制字符以及是否存在其他隐藏的空白,您就可以通过转义控制字符来最终找到cd到目录的方法。失败的话,您有几个重命名目录的选项。
上一页也很方便地提供了一种通过mv命令删除控制字符的快速而又肮脏的方法,我认为这是可行的,只要您确实避开了空格,但是却不避开了问号(因此使它们成为单个字符即可)通配符),只要该恶意目录所在的目录中没有其他内容。提出这些明确要求的原因是因为您只使用通配符和单个空格,所以您不希望通配符无意中匹配任何其他文件或目录。
如果上述方法不起作用,您几乎可以肯定地以其他方式使用其他响应提到的find方法。您可以使用inode编号重命名它,而不必尝试使用您说过的inode编号cd到目录。只需确保从上一页复制该命令的整个3行集即可(将“ desired-name”部分替换为您要重命名的实际名称)。
重命名目录后,您应该可以访问它。我只能希望它也不会在名称中包含带有控制代码的文件,否则您将不得不冲洗并重复刚才重命名目录中的每个文件(和/或子目录),这时将出现for循环明智的做法是将每个文件命名为数字,从1开始递增。
cd */
可能会工作。*
应该扩展该目录的Shell可以理解的描述,并cd
忽略其他参数。另一种方法可能是使用图形文件管理器(包括基于终端的MC)或Vim中的内置文件树导航器。您也可以尝试直接-exec
切换到find, not with
cd`(这是内置的shell),但是可以使用egls
和其他工具进行试验。