如何在 Unix 上操作带重音的文件?

dam*_*net 2 unix bash

在经历了许多版本和托管平台的 CMS 上,我们刚刚遇到了一个带重音的图像文件,它的 url 无法正常工作。所以我 ssh 到盒子上并试图重命名它。

但是,我不知道如何正确输入它的名称。例如,我知道如果一个文件被调用,my file.txt你会做类似的事情,mv my\ file.txt my_new_file.txt但你如何移动一个名为 的文件café.txt

最后,我使用了通配符并使用了,mv caf*.txt cafe.txt但我仍然想知道为什么这个带重音的图像首先不起作用,以及在 unix 上处理它的正确方法是什么。

Pet*_*ter 5

使用 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)