在我们经历了许多版本和托pipe平台的CMS上,我们只是遇到了一个重音的图像文件,它不会从它的url工作。 所以我打开盒子,试着重新命名。
但是,我无法弄清楚如何正确input名称。 例如,我知道,如果一个文件被称为my file.txt你会做mv my\ file.txt my_new_file.txt但你如何移动一个名为café.txt的文件?
最后,我用通配符做了mv caf*.txt cafe.txt但是我仍然想知道为什么这个重音图片不能起作用,以及在unix上处理它的正确方法是什么。
使用bash:
只是看我的文件:
$ ls café.txt
检查文件名的hex字节(注意:我的可能是不同的…我可能是UTF-8编码):
$ echo * | hexdump -C 00000000 63 61 66 c3 a9 2e 74 78 74 0a |caf...txt.| 0000000a
然后使用hex代码为您的键盘上找不到的部分制作一个文件名:
$ ls $'caf\xc3\xa9.txt' café.txt
在bash中,$'…'将扩展转义(就像“echo -e”一样)。 \ x后面跟着一个2位hex代码将replace为该字符。
我没有看到任何错误的:
ls caf*.txt
其次是一个
mv caf*.txt cafe.txt
但是,如果由于某种原因会匹配多个文件,你可以使用hex的东西:
ls $'caf\xc3\xa9.txt' mv $'caf\xc3\xa9.txt' café.txt
Unix文件系统将文件名存储为原始字节序列。 内核不知道或关心名字的真实性。
访问它们的应用程序使用正确的编码来正确显示非ASCII字符。 通常的方法是通过LC_ALL / LC_ *或LANG环境variables。 我build议在访问文件系统的所有应用程序上使用UTF-8语言环境,以避免不兼容/不一致。