我有一个文件夹,其中包含许多以相同结构命名的文件:
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)
我应该使用什么命令来创建这样的脚本?
这将完成这项工作:
首先: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)
ORIGINAL用NEW字符串替换字符串。
看看它是如何简单地工作的:
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)
对当前目录中的所有文件进行操作。
第一种方法:仅使用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在命令中添加了命令,以便在真正运行它们之前查看它们会做什么。
https://docs.xfce.org/xfce/thunar/4.12/bulk-renamer/start
| 归档时间: |
|
| 查看次数: |
3516 次 |
| 最近记录: |