Bash& Sql - 从多个文件名中删除specialChar

时间:2013-09-23 13:14:18

标签: php sql bash filenames

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

由于一些导入错误,我的情况是使用这样的文件名:

5970-CentroCivicodelquartiereLibertà .jpg

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

有没有办法简单地从文件夹和SQL中的文件名中删除所有这些“特殊字符”。

要么在php中做这个想法都可以。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以使用tr删除特殊字符,即Ã

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

答案 1 :(得分: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表示没有行为,经过一些测试后将其删除。

然后我将文件夹在文件夹中并更新数据库中的值。这可以作为文件名格式化,如ID-filename.ext(例如:1245-Duomo.jpg,其中1245是数据库中的相应ID)。