如何重命名文件夹中的所有文件

Ham*_*mza 5 bash scripts

我有一个文件夹,其中包含许多以相同结构命名的文件:

file.number1.2010.720p.otherinfo.mp4
file.number2.1990.720p.otherinfo.mp4
....
Run Code Online (Sandbox Code Playgroud)

我想删除所有序列:

YEAR.720p.otherinfo
Run Code Online (Sandbox Code Playgroud)

所以名称将是:

file.number1.mp4
file.number2.mp4
....
Run Code Online (Sandbox Code Playgroud)

最后我想删除所有点 (.) 除了最后的那个 (.mp4)

我应该使用什么命令来创建这样的脚本?

Raf*_*ffa 5

这将完成这项工作:

首先:rename通过在终端中运行以下命令进行安装:

sudo apt install rename
Run Code Online (Sandbox Code Playgroud)

其次:在终端中,cd到包含您的文件的目录。

最后:通过在终端中运行以下命令将文件重命名为您想要的格式:

rename 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *
Run Code Online (Sandbox Code Playgroud)

完毕


注意:

要查看该rename命令如何对您的文件进行操作但不真正重命名它们(只需将输出打印到终端),您可以在-n其后添加选项。像这样:

rename -n 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *
Run Code Online (Sandbox Code Playgroud)

说明 - 根据Hamza 的要求:

第1部分:

's/ORIGINAL/NEW/'
Run Code Online (Sandbox Code Playgroud)

ORIGINALNEW字符串替换字符串。

看看它是如何简单地工作的:

  • 请在终端运行 rename -n 's/file.number1.2010.720p.otherinfo.mp4/NEW.mp4/' *
  • 假设您file.number1.2010.720p.otherinfo.mp4在当前目录中有一个名为的文件。
  • 输出将是 rename(file.number1.2010.720p.otherinfo.mp4, NEW.mp4)

第2部分:

^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$
Run Code Online (Sandbox Code Playgroud)

从字符串的开头开始,^然后匹配(.+)点之前的一个或多个字符(任何字符)\.

该组被放入一个变量$1并重复四次(总共五次),每组被放入一个变量($2$3$4$5)直到.mp4表示为\.mp4

.mp4通过使用与字符串结尾$匹配的符号来确保字符串以结尾。

但是,这部分有点灵活,如果文件命名不一致,并且您的文件的名称中用点分隔的部分超过五个,则会给您带来不希望的结果,例如 file.number1.2010.720p.otherinfo.extrainfo.mp4

如果是这种情况,请用下面更严格的正则表达式替换此部分。这样,它只会对名称中由点分隔的五个部分的文件进行操作:

^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.mp4$
Run Code Online (Sandbox Code Playgroud)

第 3 部分:

$1$2.mp4
Run Code Online (Sandbox Code Playgroud)

将新文件名定义为第一组变量下的内容$1(在本例中file)+ 第二组变量下的内容$2(在本例中number(x))+.mp4

第 4 部分:

*
Run Code Online (Sandbox Code Playgroud)

对当前目录中的所有文件进行操作。


Mat*_*ieu 2

您可以使用cut字符串bash操作

第一种方法:仅使用cut

for I in .*mp4
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2,6)"
done 
Run Code Online (Sandbox Code Playgroud)

解释:

  • for...将选择所有.mp4文件
  • echo $I |会将I变量转换为下一个程序的输入
  • cut -d. -f 1,2,6将选择字段 1、2 和 6,其中字段之间用.

但这种方法可能会有问题,因为第六个字段可能不是扩展。


所以你可以有第二种方法:

for I in .*mp4
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2).mp4"
done 
Run Code Online (Sandbox Code Playgroud)

使用该命令,您可以强制扩展名为.mp4. 它会起作用,但是如果您不仅有mp4具有相同命名模式的文件怎么办?


在这种情况下,您可以使用扩展选择:

for I in *mp4 *avi
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2).${I##*.}"
done
Run Code Online (Sandbox Code Playgroud)
  • ${I##*.}将允许您选择最后一个.变量后面的内容I

注意:为了防止不良行为,我echo在命令中添加了命令,以便在真正运行它们之前查看它们会做什么。


Cyn*_*Rex 1

选择所有文件并按F2;然后执行下图所示的操作。 批量重命名

https://docs.xfce.org/xfce/thunar/4.12/bulk-renamer/start

  • 然而,这仅适用于安装了 Thunar 和批量重命名插件的 Xubuntu。 (2认同)