Helo那里。
我有一个带有子文件夹的Movies文件夹。
在这些子文件夹(这是电影的名称)中是我想要从somename.nfo
到subfoldername.release
以及从somename.mkv
重命名为{{1}的实际电影文件}}。
文件夹结构是这样的:
完整/ La.Haine.1995.1080p.BluRay.DTS.x264-DON / LH-don.mkv
完整/ La.Haine.1995.1080p.BluRay.DTS.x264-DON / LH-don.nfo
并希望自动将其重命名为:
完整/ La.Haine.1995.1080p.BluRay.DTS.x264-DON / La.Haine.1995.1080p.BluRay.DTS.x264-DON.mkv
完成/ La.Haine.1995.1080p.BluRay.DTS.x264-DON / La.Haine.1995.1080p.BluRay.DTS.x264-DON.release
我的库在Mac OS上,上面有Perl和Python。我可以很容易地调整任何脚本,但需要一些关于如何设置和读取foldername作为某种变量的指导。
欢迎所有指导:-)
谢谢你的阅读。
答案 0 :(得分:2)
通常你可以使用glob.glob()
来做这种事情。但是,由于您希望以递归方式遍历文件夹,因此您可能希望使用os.walk
和fnmatch
组合:
import os
import fnmatch
for root, dirnames, filenames in os.walk('/start/dir/'):
for filename in fnmatch.filter(filenames, '*.mkv'):
# do your rename here
答案 1 :(得分:2)
这是perl中的一个例子。
您可能想要修改它,但它显示了如何使用opendir / readdir,这是您需要的。它可以做得更短,但可能不像那个python版本好看,所以我去了详细和(希望)明确:))
#!/usr/bin/env perl
#
use warnings;
use strict;
my $rootdir = 'your/root/dir';
opendir( my $rootdh, $rootdir ) || die;
foreach my $dir ( readdir $rootdh ) {
# skip over the special directories . and ..
if ($dir =~ m/^\./) {
next;
}
# only want directories
next unless ( -d "$rootdir/$dir" );
opendir( my $dh, "$rootdir/$dir" ) || die;
foreach my $file ( readdir $dh ) {
if ($file =~ m/^\./) {
next;
}
# only want files this time
next unless ( -f "$rootdir/$dir/$file" );
my $extension = $file;
$extension =~ s/.*\.//g;
print "$rootdir/$dir/$file", " will be renamed to: ", "$rootdir/$dir/$dir.$extension", "\n";
# uncomment this when you're ready!
#rename "$rootdir/$dir/$file" "$rootdir/$dir/$dir.$extension";
}
}