Oli*_*Oli 54
在终端中,cd进入正确的目录,然后运行它。
rename 's/\:/-/g' *.png -vn
Run Code Online (Sandbox Code Playgroud)
这将预览重命名。它应该替换:为-.
如果看起来正确,请n从末尾删除,然后它将进行实际的重命名。
注意:17.04 以上的 Ubuntu 版本不附带rename,但它仍然可以在默认存储库中使用,因此请使用sudo apt install rename获取它
ter*_*don 11
这是一个纯 bash 解决方案:
for i in *:*; do
mv -- "$i" "${i//:/_}"
done
Run Code Online (Sandbox Code Playgroud)
该${var//pattern/replacement}格式将替换变量中所有出现的patternwith 。有关 bash 的字符串处理功能的更多信息,请参见此处。replacement$var
如果要对多个字符执行此操作,只需将它们放在一个字符类中即可。因此,例如,要将所有;, :, =, +, %,,替换为下划线,您可以执行以下操作:
$ ls
1foo:bar 2foo:bar:baz 3foo;bar 4foo=bar 5foo%bar 6foo,bar 7foo+bar
$ for i in *; do mv -- "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar 2foo_bar_baz 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar
Run Code Online (Sandbox Code Playgroud)
基本上,这个想法[ ]意味着any of the characters listed. 因此,通过将您要替换的所有字符放入字符类中,所有这些字符都会被一次性处理。
在--后mv表示的选项的结束,需要使这个甚至会工作了开头的文件名,-否则将被视为传递给选项mv。
对于您要求的特定字符,事情有点复杂,因为其中一些需要转义(我忽略了/因为 *nix 不允许它在文件名中的使用次数超过 Windows,因此不会是问题):
$ ls
1foo<bar 2foo>bar 3foo:bar 4foo\bar 5foo|bar 6foo*bar 7foo?bar 8foo"bar 9foo'bar
$ for i in *; do mv -- "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar 2foo_bar 3foo_bar 4foo_bar 5foo_bar 6foo_bar 7foo_bar 8foo_bar 9foo_bar
Run Code Online (Sandbox Code Playgroud)
请注意,我通过在每个前面添加了\,'和"进行了转义\。
| 归档时间: |
|
| 查看次数: |
75035 次 |
| 最近记录: |