【发布时间】:2019-03-09 16:46:16
【问题描述】:
我有一个文件夹,其中包含有关某些特定主题的视频讲座。它的结构是这样的:
.
├── 1_fol
│ ├── 1_file.mp4
│ ├── 2_file.mp4
│ └── 3_file.mp4
└── 2_fol
├── 10_file.mp4
├── 4_file.mp4
├── 5_file.mp4
├── 6_file.mp4
├── 7_file.mp4
├── 8_file.mp4
└── 9_file.mp4
我想把这个结构改成
.
├── 001_fol
│ ├── 001_file.mp4
│ ├── 002_file.mp4
│ └── 003_file.mp4
└── 002_fol
├── 004_file.mp4
├── 005_file.mp4
├── 006_file.mp4
├── 007_file.mp4
├── 008_file.mp4
├── 009_file.mp4
└── 010_file.mp4
这很有帮助,因为您可以使用 find . -regextype sed -regex ".*/.*\.\(mp3\|mp4\)" -print0 | sort -z | xargs -r0 vlc 打开整个播放列表。我想出了一个脚本来填充 0,但它非常冗长而且慢:
find . -depth -exec rename -v 's/(.*)\/([0-9]$)/$1\/00$2/;
s/(.*)\/([0-9]{2}$)/$1\/0$2/;
s/(.*)\/([0-9][^0-9][^\/]*$)/$1\/00$2/;
s/(.*)\/([0-9]{2}[^0-9][^\/]*$)/$1\/0$2/' '{}' ';'
这可以进一步优化吗?
编辑
实际上,在';'之后执行变得相当快已更改为“+”。但是这组正则表达式仍然看起来很丑。
【问题讨论】:
-
重命名是正确的命令。如果那里有非 mp4 文件,您可以让 find 首先使用
-name选择它们。将所有文件重命名为具有 3 个前导零然后重命名具有 4 或 5 位数字的文件可能更容易。 -
您是否对每个文件进行了多次重新处理。 find 依次查找每个文件,因此在第一个文件夹中执行 3 次,但 rename 一次又一次地对文件夹中的所有文件起作用?
-
我认为 '+' 会比 ';' 更好最后..你建议@GemTaylor有什么改变?为什么是“3”次?