通过从文件夹名称中获取的前缀重命名多个文件,bash

问题描述 投票:0回答:1

我有一系列包含 mp4 文件的文件夹(一个文件夹中一个 mp4)。 文件夹按顺序编号,如下例所示:

.. ..
18. Lesson 18 - Sketching a design to cut out
19. Lesson 19 - How to create a sweep
.. ..

这些文件夹内的.mp4文件分别命名为:

.. ..
1. Sketching a design to cut out.mp4
1. Creating a sweep.mp4
.. ...

因此所有 .mp4 文件名都以“1”开头。无论文件夹名称如何。 我想用从文件夹编号中获取的升序前缀重命名所有 mp4 文件,即

18. Sketching a design to cut out.mp4
19. Creating a sweep.mp4
.. ..

为此我想使用以下 bash 脚本:

for f in *.mp4; do mv "$f" "$(echo "$f" | sed s/1./MYNUMBER/)"; done

如何指定取自文件夹名称的连续前缀而不是“MYNUMBER”?文件夹名称和文件名都包含空格。

linux bash debian pattern-matching
1个回答
0
投票

使用 Perl 的

rename
(可在任何操作系统中使用):

层次结构:

$ tree
.
├── 18. Lesson 18 - Sketching a design to cut out
│   └── 1. Sketching a design to cut out.mp4
└── 19. Lesson 19 - How to create a sweep
    └── 1. Creating a sweep.mp4

2 directories, 2 files

代码:

rename 's@\./([^/]+)/\d+\.\s*(.*)@$1 $2@' ./**/*.mp4
rmdir *
ls -1

输出:

'18. Lesson 18 - Sketching a design to cut out Sketching a design to cut out.mp4'
'19. Lesson 19 - How to create a sweep Creating a sweep.mp4'
© www.soinside.com 2019 - 2024. All rights reserved.