我正在尝试用ASCII重命名所有unicode文件名。
我想做这样的事情:
for file in `ls | egrep -v ^[a-z0-9\._-]+$`; do mv "$file" $(echo "$file" | slugify); done
但它还不起作用。
^[a-z0-9\._-]+$
似乎不够。想办法做到这一点吗?
答案 0 :(得分:3)
首先,不要解析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
警告:如果您的文件没有扩展名,则会失败(它会使文件名加倍)。如果您需要处理,请参见this other answer Doctor J。