答案1
您不应该使用sed
重命名文件,但您可以使用 Perl 程序rename
,例如:
$ rename -n 's/\[[^]]+\] ([^[]+) \[[^]]+\]/$1/' *
rename([Beach] Music Fest_58 [August].jpg, Music Fest_58.jpg)
rename([Mountain] Summer Camp_165 [May].jpg, Summer Camp_165.jpg)
rename([Wedding] Happy Day_001 [February].jpg, Happy Day_001.jpg)
测试后删除-n
以实际重命名文件。
笔记
s/old/new
old
用。。。来代替new
\[
文字[
[^[]+
一些不存在的字符[
(stuff)
保存以供以后stuff
参考$1
等$2
这仅当您的文件名一致时才有效。muru 的回答更加便携。
答案2
sed
是错误的工具。它不会重命名文件。虽然你可以将它与可以重命名的文件配对,但使用起来更简单rename
来自 Perl:
rename -n 's/\[.*?\]//g' *
使用-n
,rename
将显示将进行哪些更改。运行 而不-n
使用 来实际重命名文件。rename
是 Perl,而在 Perl 中,.*?
不是像 这样的贪婪匹配.*
,因此您不需要使用 这样的技巧[^]]*
。
要删除周围的空格:
rename -n 's/\s*\[.*?\]\s*//g' *