linux – 如何删除文件名中的特殊字符?

在创建播放列表时,我经常遇到会破坏播放过程的文件.这将是带有空格或撇号的文件.我会用以下命令修复它

for file in *.; do mv "$file" `echo $file | tr " " '_'` ; done **(for spaces)**

现在我经常遇到带有逗号,撇号,括号和其他字符的文件.如何修改命令以删除此类字符?

还尝试重命名’s / [^ a-zA-Z0-9 _-] //’* .mp4但它似乎没有删除空格或逗号

解决方法:

如果你向它添加g修饰符,你的重命名将起作用,这将执行所有替换而不是仅执行第一个替换:

$echo "$file"
foo bar,spam.egg

$rename -n 's/[^a-zA-Z0-9_-]//' "$file"
foo bar,spam.egg renamed as foobar,spam.egg

$rename -n 's/[^a-zA-Z0-9_-]//g' "$file"
foo bar,spam.egg renamed as foobarspamegg

您可以通过参数扩展单独使用bash:

>为了从文件名中删除除a-zA-Z0-9_-之外的所有内容,假设变量文件包含文件名,使用字符类[:alnum:]匹配当前语言环境中的所有字母字符和数字:

"${file//[^[:alnum:]_-]/}"

或明确地,将LC_COLLATE更改为C:

"${file//[^a-zA-Z0-9_-]/}"

例:

$file='foo bar,spam.egg'

$echo "${file//[^[:alnum:]_-]/}"
foobarspamegg

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...