2012-03-06 7 views
0

Helo there。
ファイルの名前をフォルダ名に変更する

サブフォルダが内部にあるMoviesフォルダがあります。
これらのサブフォルダ(ムービーの名前)には、somename.nfoからsubfoldername.releaseまで、およびsomename.mkvからsubfoldername.mkvに名前を変更したい実際のムービーファイルがあります。

Folderstructureはこのようなものです:
完全/ 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

私のライブラリはPerlとPythonを搭載したMac OS上にあります。私はどんなスクリプトにも容易に適応できますが、何らかの変数としてフォルダ名を設定して読み込む方法に関するガイダンスが必要です。

すべてのガイダンスは歓迎します:-)
ありがとうございます。

+6

多分、我々はそれを他の方法でラウンドを行います。あなたは私たちが適応、それを試してみてください。 –

答えて

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

これは**完全に**機能しました。リネーム行に 'コンマ'がないだけです:-)、今は拡張子nfoを解放するために名前を変更する必要があります。 – discofris

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 
関連する問題