创建播放列表时,我经常遇到会破坏播放过程的文件。这将是带有空格或撇号的文件。我会用下面的命令修复它如何删除文件名中的特殊字符?
for file in *.; do mv "$file" `echo $file | tr " " '_'` ; done **(for spaces)**
现在我更经常遇到带有逗号,撇号,括号和其他字符的文件。我将如何修改命令来删除这些字符?
也试过rename 's/[^a-zA-Z0-9_-]//' *.mp4
但它似乎没有去掉空格或逗号
创建播放列表时,我经常遇到会破坏播放过程的文件。这将是带有空格或撇号的文件。我会用下面的命令修复它如何删除文件名中的特殊字符?
for file in *.; do mv "$file" `echo $file | tr " " '_'` ; done **(for spaces)**
现在我更经常遇到带有逗号,撇号,括号和其他字符的文件。我将如何修改命令来删除这些字符?
也试过rename 's/[^a-zA-Z0-9_-]//' *.mp4
但它似乎没有去掉空格或逗号
如果添加g
修改器你rename
会的工作,这将执行所有替换的,而不是只有第一个:
$ 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:]
以匹配当前locale
所有的字母和数字:
"${file//[^[:alnum:]_-]/}"
或明确,改变LC_COLLATE
到C
:
"${file//[^a-zA-Z0-9_-]/}"
例子:
$ file='foo bar,spam.egg'
$ echo "${file//[^[:alnum:]_-]/}"
foobarspamegg
for file in *; do mv "$file" $(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g'); done &
我修改您的代码一点,得到了我所需要的只是它似乎是它留下了一个逗号,并没有将其删除:在* .MP4文件;做mv“$ file”'echo“$ {file // [^ [:alnum:] _-。] /}”'; DONE – Andy