2

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

我想做这样的事情:

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

但它还没有工作。

  • 首先,正则表达式^[a-z0-9\._-]+$似乎还不够。
  • 其次,slugify 还转换了文件的扩展名,所以我必须先剪切扩展名,然后再将其放回去。

有办法做到这一点吗?

4

1 回答 1

4

首先,不要解析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 医生的另一个答案。

于 2012-09-03T19:08:33.350 回答