如何将目录更改为名称由非 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
仅识别有问题的目录并对其进行重命名。
- 在父目录中使用
ls -i
来识别相关的 inode。 - 执行
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"