重要的是要了解,这不是fsck
可以帮助的“文件系统损坏” 。就文件系统而言,文件名可以是任何字节序列,只要没有单个字节具有值0x00(ASCII NUL,C字符串结尾标记)或0x2F(/
目录分隔符)即可。(如果文件名确实以某种方式嵌入了00或2F字节,fsck
则应予以解决。)
而是,您拥有的是应用程序软件(Dolphin,ls
)认为包含在“语言环境” 中无法显示的字符的文件名,因此它将用占位符替换它们。您也不能键入这些字符,因此操作文件比较困难,但是只要您不键入,复制和粘贴名称就可以执行操作。例如,如果您直接从Dolphin内删除或重命名问题文件,那应该可以正常工作(我什至可以说,如果它不起作用,那是Dolphin中的错误)。
如果您需要通过外壳对它们进行某些操作(例如,如果它们归root
GUI程序所有,因此不能被GUI程序修改),则可以使用“全局”模式间接命名它们,这些模式将扩展为正确的顺序(s)个字节并传递。
现在,当然,您不希望偶然删除某些东西,因为您的glob模式匹配得太多,所以我的建议是使用Perl rename
实用程序将每个文件名转换为十六进制编码:
$ rename '$_ = unpack("H*", $_)' *
这不会破坏任何信息-文件本身,也不会破坏之前在文件名中最初编码的任何含义。可以使用以下命令撤消特定文件的操作
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
注意:有两个rename
来自不同来源的名为的程序。上述命令仅适用于源自Perl的命令。在Ubuntu中,您需要的是“重命名”软件包中的软件包,而不是“ util-linux”软件包中的软件包。 rename -h
会区别:这就是您想要的...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
...这不是您想要的...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
寻找的关键是“ perlexpr”。您可能具有旧版本的Perl重命名,它不能理解上面的所有选项,但是我显示的命令仍然可以使用。
编辑:在14.04 .5以下,所包含的perl脚本rename
不支持-h开关。您可以通过检查手册页来确认自己是否正确,man rename
在这种情况下,顶行将包含以下内容:
RENAME(1)Perl程序员参考指南RENAME(1)