如何在 Bash 中删除文件名中的尾随字符?

Wid*_*eye 12 linux bash rename

我有一堆媒体文件,如下所示:

tvshow.s01e11]Bloodlines.avi
tvshow.s01e12]suffer.avi
tvshow.s01e13]NotMe.avi
Run Code Online (Sandbox Code Playgroud)

我想将它们重命名为

tvshow.s01e11.avi
tvshow.s01e12.avi
tvshow.s01e13.avi
Run Code Online (Sandbox Code Playgroud)

我试过使用重命名,但显然我没有得到正确的语法,因为它失败了。

ilk*_*chu 14

在 shell 中,你可以简单地做:

for x in *]*.avi ; do 
    mv -i "$x" "${x%]*.avi}.avi"
done
Run Code Online (Sandbox Code Playgroud)

shell 可以生成一个文件名列表,只需一个常规的 glob,并 ${var%pattern}从 variable 中的字符串末尾删除(最短)匹配模式var。由于最终的扩展名始终是.avi,我只是将其与模式一起删除并将其添加回来。使用引号,这也应该适用于包含空格的文件名,例如Fancy Name for a Show.s01e01]Asdf.avi


小智 9

这将重命名文件。您需要 \w* 来表示任意数量的字母数字字符。

rename 's/\]\w*//' *
Run Code Online (Sandbox Code Playgroud)

参考:http : //www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards

  • 请注意,这需要 Perl 的 `rename` 实用程序,而不是 [来自 util-linux 的同名](http://man7.org/linux/man-pages/man1/rename.1.html)。见[这里](http://unix.stackexchange.com/a/148380/170373)和[这里](http://stackoverflow.com/q/22577767/6372809) (5认同)