首页 > 解决方案 > 在 bash 上处理 $'\346' 等特殊字符

问题描述

我有许多带有 和 等字符的$'\351'文件$'\346'。我还没有弄清楚如何在 bash 上引用这些文件。我如何使用mvsed更改他们的名字?

例如,当我运行ls时,出现的文件之一显示为:

'根'$'\346''%8B'$'\240''.html'

标签: bashnon-ascii-characters

解决方案


在这种情况下,大多数用户都希望使用convmv来转换此类文件名的编码。

但是,由于您并不真正知道或关心原始文件名应该是什么,而只是想要一个可逆的转换以使名称更易于处理,您可以将所有文件重命名为它们的字节的十六进制转储:

export LC_ALL=C
for f in *
do
  mv -- "$f" "$(printf '%s' "$f" | od -t x1 -An | tr -cd 'a-f0-9')"
done

这将例如将文件'根'$'\346''%8B'$'\240''.html'转换为e6a0b9e6253842a02e68746d6c


推荐阅读