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

时间:2016-11-21 03:22:44

标签: linux bash

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

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

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

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

2 个答案:

答案 0 :(得分:5)

如果您为其添加rename修饰符,则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_-之外的所有内容,假设变量file包含文件名,使用字符类[:alnum:]匹配当前{{1}的所有字母字符和数字}}:

    locale

    或明确地将"${file//[^[:alnum:]_-]/}" 更改为LC_COLLATE

    C

示例:

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

答案 1 :(得分:2)

setNotifyValue(_:for:)