我有一堆包含带有特殊字符的文件的目录和子目录,比如这个文件:
robbie@phil:~$ ls test?sktest.txt
test?sktest.txt
Run Code Online (Sandbox Code Playgroud)
Find 揭示了一个转义序列:
robbie@phil:~$ find test?sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
Run Code Online (Sandbox Code Playgroud)
我什至可以在控制台上输入他们的名字的唯一原因是因为选项卡完成。这也意味着我可以手动重命名它们(并去除特殊字符)。
我已将 LC_ALL 设置为 UTF-8,这似乎没有帮助(也不是在新外壳上):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
我正在使用 ssh 从我的 mac 连接到机器。这是一个 Ubuntu 安装:
robbie@phil:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=7.10
DISTRIB_CODENAME=gutsy
DISTRIB_DESCRIPTION="Ubuntu 7.10"
Run Code Online (Sandbox Code Playgroud)
Shell 是 Bash,TERM 设置为 xterm-color。
这些文件已经存在很长一段时间了,它们不是使用 Ubuntu 安装创建的。所以我不知道以前的系统编码设置是什么。
我已经尝试过以下方面的事情:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Run Code Online (Sandbox Code Playgroud)
但我找不到可以做我想做的一切的解决方案:
或者
我有一些零碎的东西,比如遍历所有文件并移动它们,但是识别文件并为 mv 命令正确格式化它们似乎是困难的部分。
任何关于它们为什么不能正确显示或如何“猜测”正确编码的额外信息也是受欢迎的。(我试过 convmv 但它似乎并没有完全按照我的要求做: …