在经历了许多版本和托管平台的 CMS 上,我们刚刚遇到了一个带重音的图像文件,它的 url 无法正常工作。所以我 ssh 到盒子上并试图重命名它。
但是,我不知道如何正确输入它的名称。例如,我知道如果一个文件被调用,my file.txt
你会做类似的事情,mv my\ file.txt my_new_file.txt
但你如何移动一个名为 的文件café.txt
?
最后,我使用了通配符并使用了,mv caf*.txt cafe.txt
但我仍然想知道为什么这个带重音的图像首先不起作用,以及在 unix 上处理它的正确方法是什么。
使用 bash:
只是为了查看我的文件:
$ ls
café.txt
Run Code Online (Sandbox Code Playgroud)
检查文件名的十六进制字节(注意:我的可能不同……我的可能是 UTF-8 编码的):
$ echo * | hexdump -C
00000000 63 61 66 c3 a9 2e 74 78 74 0a |caf...txt.|
0000000a
Run Code Online (Sandbox Code Playgroud)
然后使用键盘上找不到的部件的十六进制代码制作文件名:
$ ls $'caf\xc3\xa9.txt'
café.txt
Run Code Online (Sandbox Code Playgroud)
在 bash 中, $' ... ' 将展开转义(很像 "echo -e" 所做的)。\x 后跟一个 2 位十六进制代码将用该字符替换它。
我看不出有什么问题:
ls caf*.txt
Run Code Online (Sandbox Code Playgroud)
接着是一个
mv caf*.txt cafe.txt
Run Code Online (Sandbox Code Playgroud)
但是如果由于某种原因会匹配多个文件,你可以使用十六进制的东西:
ls $'caf\xc3\xa9.txt'
mv $'caf\xc3\xa9.txt' café.txt
Run Code Online (Sandbox Code Playgroud)