在创建播放列表时,我经常遇到会破坏播放过程的文件.这将是带有空格或撇号的文件.我会用以下命令修复它
for file in *.; do mv "$file" `echo $file | tr " " '_'` ; done **(for spaces)**
Run Code Online (Sandbox Code Playgroud)
现在我经常遇到带有逗号,撇号,括号和其他字符的文件.如何修改命令以删除此类字符?
也试过,rename 's/[^a-zA-Z0-9_-]//' *.mp4但它似乎没有删除空格或逗号
小智 7
for file in *; do mv "$file" $(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g'); done &
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
您可以bash通过参数扩展单独执行此操作:
为了删除除a-zA-Z0-9_-文件名之外的所有内容,假设变量file包含文件名,使用字符类[:alnum:]匹配当前的所有字母字符和数字locale:
"${file//[^[:alnum:]_-]/}"
Run Code Online (Sandbox Code Playgroud)
或明确地,更改LC_COLLATE为C:
"${file//[^a-zA-Z0-9_-]/}"
Run Code Online (Sandbox Code Playgroud)例:
$ file='foo bar,spam.egg'
$ echo "${file//[^[:alnum:]_-]/}"
foobarspamegg
Run Code Online (Sandbox Code Playgroud)