2017-03-02 10 views
0

は私のディレクトリ構造が含まれていました。perlを使用してリンクディレクトリ名でファイルの名前を変更するにはどうすればよいですか?次のように私はperl.Iを使用してディレクトリ名を持つ私のファイルの名前を変更したい

期待
|-- Basket 
    | |-- ICC 
    | | |-- rest10-rest10-rest10-test.txt 
    | | `-- rest1 
    | |  `-- rest1-rest1-rest1-rest.txt 
    | |-- bl2-bl2-bl2-b1.txt 

|-- Basket 
    | |-- ICC 
    | | |-- ICC_rest10.txt 
    | | `-- rest1 
    | |  `-- ICC_rest1.txt 
    | |-- Basket_bl2.txt 

私のコード:(私はすべて取ってみましたが.txtファイル)

#!/usr/bin/perl 
use strict; 
use warnings; 
my $dir = '/home/user1/output'; 
my @files = glob "${dir}*.txt*"; 
foreach (@files) { 
    next if -d; 
    my $o_name = $_; 
    rename $o_name, $_ or 
     $_ = $o_name, 
     print $_; 
} 
+1

あなたの質問は何ですか? '$ o_name'を変更しないので、' rename'はファイルの名前を変更しません。また、サブディレクトリが処理されないように、単一のディレクトリだけを探しています。 – Borodin

+0

重複:http://stackoverflow.com/questions/42527874/how-to-rename-the-directory-structure-by-matching-the-text-file-using-perl – user2141046

+0

私は彼らがディレクトリ名を変更していると思います私はそれぞれのディレクトリ内のディレクトリ名でテキストファイルを変更するのが好きです。それはどのようにその質問の複製になります@ user2141046 –

答えて

0
#!/usr/bin/perl 
use strict; 
use warnings; 
sub runDir($$); 
sub runDir($$) { 
    my $prefix = shift @_; 
    my $dir = shift @_; 
    opendir(DIR, $dir) or die $!; 
    my @entries = readdir(DIR); 
    close(DIR); 
    foreach my $file (@entries) { 
     next if ($file =~ /^\.+$/); 
     if (-d $dir . '/' . $file) { 
      runDir($prefix . $file . '_', $dir . '/' . $file); 
     } elsif ((-f $dir . '/' . $file) && ($file =~ /\.txt$/)) { 
      my $suffix = $file; 
      $suffix =~ s/^(\S+)-.+\.txt$/$1.txt/; 
      print "rename $dir . '/' . $file, $dir . '/' . $prefix . $suffix . \n"; 
     } 
    } 
} 
runDir('output_', '/home/user1/output'); 

しかし、ファイル名の衝突に注意:同じディレクトリ内

rest1-rest1-rest.txt 
rest1-rest1-rest1-rest.txt 

を...

+0

私はいくつかのクエリを持っています1)なぜ($$)を使用した2)私はこのコードを実行する場合、私は再び同じ名前をファイル名を二重に変更する同じコードを実行すると、 -rest1-rest_rest1-rest1-rest.txt)@ v.sheldeshov –

+0

($$) - runDirに厳密に2つの変数が必要であると定義するだけでした。後で使用するときにエラーを回避する。 "res-res"問題:ファイル名が接頭辞から始まる場合は、チェックを追加するのは難しくありません。置換する} elsif((-f $ dir。 '/'。$ file)&&($ file =〜/\.txt$/)){.................. ($ file!〜/^$ prefix /)){...}とelsif((-f $ dir。 '/'。$ file)&&($ file =〜/\.txt$/) –

関連する問題