我对终端很陌生,我正面临这种情况。我有很多文件,文件名存储在数据库中。
由于一些导入错误,我的情况是文件名如下:
5970-CentroCivicodelquartiereLibertà .jpg
最后一个字符 (à) 被替换为: [Ã ]
有什么方法可以简单地从文件夹和 SQL 中的文件名中删除所有这些“特殊字符”。
在 php 中执行此操作的任何想法都可以。
提前致谢!
您可以tr
用来摆脱特殊的 char,即Ã
:
tr -cd "[:print:]"
例如:
$ foo="5970-CentroCivicodelquartiereLibertà .jpg"
$ tr -cd "[:print:]" <<< "${foo}"
5970-CentroCivicodelquartiereLibert .jpg
为了对目录中的所有文件执行此操作,您可以说:
for i in * ; do new="$(tr -cd "[:print:]" <<< "$i")"; mv "$i" "$new"; done
编辑:为了也删除空格,请说:
for i in * ; do new="$(tr -cd "[:print:]" <<< "$i" | tr -d " ")"; mv "$i" "$new"; done
最后我用这个 bash 命令解决了:
find . -depth -exec rename -n 's/[^[:ascii:]]/_/g' {} \; | cat -v
find . -depth -exec rename -n 's/[^A-Za-z0-9\.\/_-]//g' {} \; | cat -v
-n 表示没有动作,经过一些测试后将其删除。
然后我cicle trought文件夹中的文件并更新数据库中的值。这可能是文件名,其格式类似于 ID-filename.ext(例如:1245-Duomo.jpg,其中 1245 是数据库中的对应 ID)。