for FILE in *
do
FN=${FILE%.*} # file name without extension
FE=${FILE#$FN.} # extension without dot in front
SUBSTITUTE="s/[^A-Za-z0-9._-]/_/g;s/[.]/_/g;s/[ ]/_/g;s/____|___|__|___-___|__-__|_-_|___--___|__--__|_--_/_/g;s/____$|__$|_$//g;s/é|è|ë|ê/e/g;s/à|á|ä|â|ã/a/g;s/ó|ò|ô|õ/o/g;s/ö/oe/g;s/ù|û|ú/u/g;s/ü/ue/g;s/ñ/n/g;s/í|ì|î|ï/i/g;s/ç/c/g"
if [[ "${FE}" != "sh" ]]
then
if [[ "${FILE}" == "${FN}.${FE}" ]]
then
mv "${FILE}" $(echo "${FN}" | sed -r "${SUBSTITUTE}").${FE}
else
mv "${FILE}" $(echo "${FILE}" | sed -r "${SUBSTITUTE}")
fi
fi
done
3条答案
按热度按时间yqkkidmi1#
字符串
krugob8w2#
如果你给
g
添加了g
修饰符,你的rename
就可以工作了,这会执行所有的替换,而不仅仅是第一个:字符串
您可以单独使用will
bash
来执行此操作,并扩展参数:a-zA-Z0-9_-
之外的所有内容,假设变量file
包含文件名,使用字符类[:alnum:]
匹配当前locale
中的所有字母字符和数字:型
或者显式地将
LC_COLLATE
更改为C
:型
示例:
型
9wbgstp73#
代码也稍微修改了一下。
由于(indir)替换,比如文件名净化,可能会变得复杂,我暂时想出了这个:
字符串
它不包括shell脚本(适应性强)。因此,它会在目录中查找带有扩展名和不带扩展名的文件。大多数特殊字符会被排除,突出显示的字母会被默认字母替换(德语的<$经常写成oe,<$as ue,还有西班牙语的和葡萄牙语的<$)。用下划线和连字符替换的问题是,你可以用double结束,三重下划线和underscorehyphenunderscore之类的东西,你可能也想把它们变成一个下划线或连字符。你谈到了mp4,是的,视频文件,字幕文件,所有这些点!让脚本很难轻松操作。
Oh. do. I.[hate]. these. types. off.(x264). files.mp4
更好:
Hm_What_a_Nicely_Convertable_x264_File_I_Have_Here.mp4
它并不完美,仍然是初级的,也许是“遥远的”,需要更多的测试,但似乎工作。
不要笑,plz ;)