我对终端很新,而且我正面临着这种情况。我有很多文件,文件名存储在数据库中。
由于一些导入错误,我的情况是使用这样的文件名:
5970-CentroCivicodelquartiereLibertà .jpg
最后一个字符(à)已替换为:[Ã]
有没有办法简单地从文件夹和SQL中的文件名中删除所有这些“特殊字符”。
要么在php中做这个想法都可以。
提前致谢!
答案 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)。