bash - 在 bash 上处理 $'\346' 等特殊字符
问题描述
我有许多带有 和 等字符的$'\351'
文件$'\346'
。我还没有弄清楚如何在 bash 上引用这些文件。我如何使用mv
和sed
更改他们的名字?
例如,当我运行ls
时,出现的文件之一显示为:
'根'$'\346''%8B'$'\240''.html'
解决方案
在这种情况下,大多数用户都希望使用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
推荐阅读
- java - 理解 Java 中的 getSystemResource()
- excel - 如何在Excel中自动填充不像行那样计数的定期内容
- html - 当徽标被包裹在Bootstrap 中的标签中时,navbar-toggler 左对齐并在徽标图像下方
- javascript - 从四舍五入 timeAxis.step 停止 vis.js 时间线?
- python - 如何对索引中与某个列值匹配的行列求和?
- php - BaseHelper 未找到 Laravel
- npm - 找不到模块:错误:无法解析“@babylonjs/core/Engines/engine”
- amazon-web-services - Terraform Modules - 从根目录识别子模块变量
- maven - maven-dependency-plugin 解压大文件大小问题
- javascript - React-Native (redux) 错误:在“Connect(App)”的上下文中找不到“store”