我正在尝试以 ASCII 重命名所有 unicode 文件名。
我想做这样的事情:
for file in `ls | egrep -v ^[a-z0-9\._-]+$`; do mv "$file" $(echo "$file" | slugify); done
但它还没有工作。
- 首先,正则表达式
^[a-z0-9\._-]+$
似乎还不够。 - 其次,slugify 还转换了文件的扩展名,所以我必须先剪切扩展名,然后再将其放回去。
有办法做到这一点吗?
首先,不要解析ls
. 这通常是一个坏主意,特别是如果您期望文件名称中包含任何类型的奇怪字符。
假设slugify
您对文件名的一般要求是什么,请尝试:
for file in * ; do
if [ -f "$file" ] ; then
ext=${file##*.}
name=${file%.*}
new_name=$(echo "$name"|slugify)
if [[ $name != $new_name ]] ; then
echo mv -v "$name.$ext" "$new_name.$ext"
fi
fi
done