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

Bash 以ascii重命名linux目录中的每个unicode文件,bash,unix,Bash,Unix,我正在尝试用ASCII重命名所有unicode文件名 我想做这样的事情: for file in `ls | egrep -v ^[a-z0-9\._-]+$`; do mv "$file" $(echo "$file" | slugify); done 但它还不起作用 首先,regexp^[a-z0-9\.-]+$似乎不够 其次,slugify还转换文件的扩展名,因此我必须先剪切扩展名,然后再将其放回去 有什么办法吗?首先,不要解析ls的输出。一般来说,这是一个坏主意,尤其是如果您希望文

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

我想做这样的事情:

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

  • 首先,regexp
    ^[a-z0-9\.-]+$
    似乎不够
  • 其次,slugify还转换文件的扩展名,因此我必须先剪切扩展名,然后再将其放回去

有什么办法吗?

首先,不要解析
ls
的输出。一般来说,这是一个坏主意,尤其是如果您希望文件的名称中有任何奇怪的字符

假设
slagify
通常对文件名执行您想要的操作,请尝试:

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

警告:如果您的文件没有扩展名,则此操作将失败(它将使文件名加倍)。如果需要处理,请查看。

首先,不要解析
ls
的输出。一般来说,这是一个坏主意,尤其是如果您希望文件的名称中有任何奇怪的字符

假设
slagify
通常对文件名执行您想要的操作,请尝试:

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

警告:如果您的文件没有扩展名,则此操作将失败(它将使文件名加倍)。如果您需要处理,请查看。

您需要更具体一些。您正在尝试重命名所有字符超出ISO-646的名称吗?ISO-8859-1?对于反汇编扩展,请阅读“ManBaseName”。我认为这个问题更适合您,因为您需要更加具体。您正在尝试重命名所有字符超出ISO-646的名称吗?ISO-8859-1?阅读“man basename”了解反汇编扩展。我认为这个问题更适合于slugify命令在
pip install slugify
中提供:slugify命令在
pip install slagify
中提供: