我有一系列包含 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”?文件夹名称和文件名都包含空格。
使用 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'