Hid*_*ats 6 command-line bash sed batch-rename
我有很多照片需要重命名。
[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg
Run Code Online (Sandbox Code Playgroud)
我需要删除所有方括号。为此,我找到了this & this。
sed在这些页面中使用命令,括号前后的空格仍然存在。就我而言,我希望删除里面的文本、前后的空格以及括号本身。
Happy Day_001.jpg
Summer Camp_165.jpg
Music Fest_58.jpg
Run Code Online (Sandbox Code Playgroud)
要删除[first]?&?[last]括号,如何使用sed命令执行此操作?
您不应该使用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)
Run Code Online (Sandbox Code Playgroud)
-n测试后删除以实际重命名文件。
s/old/new替换old为new\[ 文字 [[^[]+ 一些不是的字符 [(stuff)保存stuff供以后到参考如$1,$2等这仅在您的文件名一致时才有效。muru 的答案更便携。
sed是错误的工具。它不会重命名文件。虽然您可以将它与可以的东西配对,rename但从 Perl使用它更简单:
rename -n 's/\[.*?\]//g' *
Run Code Online (Sandbox Code Playgroud)
使用-n,rename将显示将进行哪些更改。运行而不-n实际重命名文件。rename是 Perl,在 Perl 中,.*?不是像 的贪婪匹配.*,所以你不需要使用像[^]]*.
也删除周围的空白:
rename -n 's/\s*\[.*?\]\s*//g' *
Run Code Online (Sandbox Code Playgroud)