将文件重命名为其foldername

时间:2012-03-06 14:11:16

标签: python macos perl renaming

Helo那里。

我有一个带有子文件夹的Movies文件夹。
在这些子文件夹(这是电影的名称)中是我想要从somename.nfosubfoldername.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作为某种变量的指导。

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

2 个答案:

答案 0 :(得分:2)

通常你可以使用glob.glob()来做这种事情。但是,由于您希望以递归方式遍历文件夹,因此您可能希望使用os.walkfnmatch组合:

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";
    }
}