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



我正在尝试用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医生的另一个答案。

最新更新