0

直升机在那里。

我有一个包含子文件夹的电影文件夹。
在这些子文件夹(这是电影的名称)中是实际的电影文件,我想从somename.nfotosubfoldername.release和 from somename.mkvto重命名subfoldername.mkv

文件夹结构是这样的:
complete/La.Haine.1995.1080p.BluRay.DTS.x264-DON/lh-don.mkv
complete/La.Haine.1995.1080p.BluRay.DTS.x264-DON/lh-don.nfo

和想自动将其重命名为:

complete/La.Haine.1995.1080p.BluRay.DTS.x264-DON/La.Haine.1995.1080p.BluRay.DTS.x264-DON.mkv
complete/La.Haine.1995.1080p .BluRay.DTS.x264-DON/La.Haine.1995.1080p.BluRay.DTS.x264-DON.release

我的库在 Mac OS 上,上面有 Perl 和 Python。我可以轻松地调整任何脚本,但需要一些关于如何将文件夹名称设置和读取为某种变量的指导。

欢迎所有指导 :-)
感谢您的阅读。

4

2 回答 2

2

一般来说,你可以使用glob.glob()这种东西。但是由于您想递归地遍历文件夹,您可能希望使用os.walkandfnmatch组合来代替:

import os
import fnmatch

for root, dirnames, filenames in os.walk('/start/dir/'):
  for filename in fnmatch.filter(filenames, '*.mkv'):
    # do your rename here
于 2012-03-06T14:19:55.593 回答
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";
    }
}
于 2012-03-06T15:07:24.243 回答