Bash 以ascii重命名linux目录中的每个unicode文件
我正在尝试用ASCII重命名所有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的输出。一般来说,这是一个坏主意,尤其是如果您希望文
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
中提供: