修复 Bash 中开头和结尾字符错误的文件名,批量重命名

修复 Bash 中开头和结尾字符错误的文件名,批量重命名

我需要通过删除第一个和最后一个字符(之前)来重命名很多文件.ext

错误>

'1st moto ride [Aug '99]'.mp4
'Samuel' Song'.mp3
'Plane Landing'.avi
'"Ode" (sort of) to the Sun'.pdf
'The Divine Comedy [1308, Alighieri D.]'.txt
'100 ways to jump off the Moon'.wav
'[1979] Ста́лкер'.mkv

右>

1st moto ride [Aug '99].mp4
Samuel' Song.mp3
Plane Landing.avi
"Ode" (sort of) to the Sun.pdf
The Divine Comedy [1308, Alighieri D.].txt
100 ways to jump off the Moon.wav
[1979] Ста́лкер.mkv

谢谢

答案1

假设这些单引号不是一些无法解释的ls工件,而是实际上文件名的一部分。

进一步假设您已安装 (p)rename(perl 实用程序):

ls
''\''1st moto ride [Aug '\''99]'\''.mp4'
rename "s/^'//;s/'\.(.*)$/.\$1/" *
ls
'1st moto ride [Aug '\''99].mp4'

请注意,在此输出中,第二个输出中文件名两端的单引号ls确实是ls工件。

关于该工具和表达式的一些解释性文字。

它使用 Perl 正则表达式。除了for 反向引用之外,语法s///与 中的基本相同。如果用 分隔,则可以在一行上使用多个表达式。sed$1;

换句话说:搜索前导'并将其替换为空。然后搜索'前面的 a 文字.,捕获 a 之后的所有内容.,并将所有与 a.和捕获的部分匹配的内容替换。

通常我会使用单引号来包裹 perl RE,但由于我们试图替换单引号(并试图转义这是非常难看的),所以我使用了双引号。这意味着我必须$1在替换部分中转义(否则它将成为缺少的 bash 变量中的空字符串。

相关内容