0

我对终端很陌生,我正面临这种情况。我有很多文件,文件名存储在数据库中。

由于一些导入错误,我的情况是文件名如下:

5970-CentroCivicodelquartiereLibertà .jpg

最后一个字符 (à) 被替换为: [Ã ]

有什么方法可以简单地从文件夹和 SQL 中的文件名中删除所有这些“特殊字符”。

在 php 中执行此操作的任何想法都可以。

提前致谢!

4

2 回答 2

2

您可以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
于 2013-09-23T13:28:29.290 回答
0

最后我用这个 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)。

于 2013-10-03T09:48:26.680 回答