我正在尝试用ASCII重命名所有unicode文件名。
我想做这样的事情:
for file in `ls | egrep -v ^[a-z0-9._-]+$`; do mv "$file" $(echo "$file" | slugify); done
但它还不起作用。
- 首先,regexp
^[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
警告:如果你有没有扩展名的文件,这将失败(它会使文件名加倍)。如果你需要处理的话,看看J医生的另一个答案。