如何“cd”到非 utf8 目录

如何“cd”到非 utf8 目录

如何将目录更改为名称由非 ASCII 默认字符组成的目录?

root@senior:/media/data/hudba/# ls . -l
total 3096
-rwxr-xr-x 2 user users 3160192 Jul 31  2006 Lucie BĂ­lĂĄ - esemes.mp3
drwxr-xr-x 1 user users    8192 Mar 28  2008 ĂplnÄahĂĄ

如何进入该目录(第二个条目)?或者(更好的方法是)在不使用 mc 或其他工具或重新安装分区的情况下重命名它?

答案1

确保它确实不是 UTF-8。

echo $LANG;如果返回的字符串不是以 结尾.UTF-8,则您的终端未设置正确的编码。

在可能的情况下,使用制表符或通配符完成。
如果第一个或第三个字符是 ASCII,请尝试使用制表符补全来完成这项工作。远程服务器将提供原始字节,此时您可以直接按回车键,即使它看起来没有意义。

显然,在这种情况下,制表符补全并不适用,但正如 David 指出的那样,您可能能够使用cd基于子字符串的通配符。

使用抽象。
如果你不能传输正确的字符代码,甚至第一个字符都不能,那么你几乎使用其他工具为您解决问题,例如哄骗命令find仅识别有问题的目录并对其进行重命名。

  1. 在父目录中使用ls -i来识别相关的 inode。
  2. 执行find . -type d -inum inode#,根据需要替换 inode 编号。如果此命令有效并且仅返回单个目录(您要重命名的目录),则将其附加到 find 命令的末尾: -okdir mv {} ILikeThisNameBetter \;

-okdir是提示您是否真的想做某事的变体-execdir,在这种情况下这是正确的方法)

感谢 Aaron Bush 提出的 inode 方法,我在之前的修订中是通过文件大小来实现的。

答案2

目录名称的双引号应该可以正常工作。

 cd "ĂplnÄahĂĄ" 

即使名称中有空格

 cd "ĂplnÄahĂĄ hfjksf" 

答案3

正如您所知,至少有一些字符是 ASCII,您可以在此基础上构建:

# cd ?pln*

其中?代表one character,且*代表any characters

如果不起作用(可能是因为该字符包含 2 个 UTF-8 字符,例如后重音字符),请尝试:

# cd ??pln*

甚至

# cd ???pln*

最终你会得到正确的目录。重命名也是一样,例如:

# mv "?pln*" "ascii-version-of-the-directory"

相关内容