在ascii中重命名linux目录的每个unicode文件

时间:2012-09-03 18:54:25

标签: bash unix

我正在尝试用ASCII重命名所有unicode文件名。

我想做这样的事情:

for file in `ls | egrep -v ^[a-z0-9\._-]+$`; do mv "$file" $(echo "$file" | slugify); done

但它还不起作用。

  • 首先,正则表达式^[a-z0-9\._-]+$似乎不够。
  • 第二,slugify也会转换文件的扩展名,所以我必须首先删除扩展名,然后再将其删除。

想办法做到这一点吗?

1 个答案:

答案 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