如何解决批量替换由macOS创建的Unix中无法识别的字符
在作为NAS一部分的Linux卷上,该数据具有许多TB的数据,某些文件是从macOS创建的,而某些从macOS上传的文件似乎包含了无法通过FTP或SMB文件协议复制的文件名字符。这些文件将显示为“图片名称001.jpg”。 “”可能代表冒号或斜线的地方。
我可以搜索“”,发现它适用于卷上分布位置的2171个文件。手动查找和更正每个文件名的方法太多。
我以为我可以通过SSH连接到NAS,并且只需循环遍历每个目录,即可将“”自动替换为“ _”,但这不起作用,因为:
for file in **; do mv -- "$file" "${file///_}"; done
此尝试将在与匹配的第一项上抛出错误:
mv: can't rename '120422_LAXJFK': No such file or directory
很明显,显示为“”的替代字符不是寻址文件或目录的方法,因为它所指的是卷索引中实际上不存在的名称。
(A)如何确定这里是“ 120422_LAX:JFK”还是“ 120422_LAX / JFK”,以及(B)如何转义这些无效字符以最终能够将所有这些名称自动重命名为例如“ 120422_LAX_JFK”?
例如,是否有一种方法可以从名称中获取数字文件ID,然后在名称中包含“”的情况下指示通过数字重命名文件?
解决方法
我认为问题在于,“”后面可能是不同的符号代码。当系统无法表示某些字符时(例如,不支持给定的编码),则系统会自动将其替换为某些默认字符(在您的情况下为“”)。但是实际上有一些字符代码,应该在名称中。但是,当您尝试执行此for file in **; do mv -- "$file" "${file///_}"; done
系统时,无法识别代码,则该符号为“ is”代表。
我认为可以通过更改两种设备(mac和NAS)上字符的编码(它们应该兼容并且更好地相同)来解决此问题
希望这会有所帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。