我需要通过删除第一个和最后一个字符(之前)来重命名很多文件.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 变量中的空字符串。