2009-06-02 9 views
-1

私は何百ものファイルからなるディレクトリを読もうとしています。ディレクトリ内のすべてのファイルについて、私は別のファイルにアクセス(編集)し、そのファイル内の特定の文字列 'information = filename'を '/ home/test/test_these_files'ディレクトリにあるファイル名 'information ='で置き換えます。これに続いてファイル '/home/test/controlfile.txt'を実行します。私は次のスクリプトを書いて、ファイルの名前を置き換える配列(文字列のファイル名)として渡そうとしました。私はそれが働かないことを知っているが、私は何がうまくいくのか分からない。助言がありますか? FYI:プログラムはコンパイルエラーを表示しません。置き換える必要がある文字列に異なるファイル名を入力する方法は?

#!use/bin/perl 
use strict; 
use warnings; 

my $find = 'information=filename'; 

opendir (DIR, "/home/test/test_these_files") || die "can't open directory"; 
my @files = grep(/.aa/, readdir(DIR)); 
print @files; 
print "\n"; 
closedir(DIR); 

foreach (@files) { 
    my $replace = 'information=<@files>'; # want to replace with 'information=<filenames> 
    #filenames are names of files present in the '/home/test/test_these_file' directory 
    open (FILE, '/home/test/controlfile.txt') || die "cant open file \n"; 
    my @body = <FILE>; 
    print @body; 
    open (OUT, '>/home/test/controlfile.txt') || die "can't create file \n"; 
    foreach $_ (@body) { 
     (s/$find/$replace/g); 
     print OUT "$_"; 
    } 
    'perl /home/test/controlfile.txt'; 
    close(FILE); 
    close(OUT); 
} 
exit; 
+0

インデントはあなたの友人です。 '' perl /home/test/controlfile.txt 'とは何ですか? $ replaceは間違って設定されています。 – Schwern

答えて

0

あなたの主なエラーがあなたのシェバングにおそらくある:

#!/usr/bin/perl 

代わりの

#!use/bin/perl 

はまた、あなたは、あなたの質問に言い換えることができます。あなたが何を言おうとしているのかを理解することは本当に難しいです。

--edit

私はあなたのすべてのファイルが特定のディレクトリに既存のインデックスファイルを作成する必要があり、私はあなたの質問を理解すると思います。あなたは

#!/usr/bin/perl 

use strict; 

$files_dir = '/home/test/test_these_files'; 
#$file_ext = '.*\.aa'; # Get files with extension of .aa 
$file_ext = '.aa'; # Get files with any character followed by 'aa' 
$index_file = '/home/test/controlfile.txt'; 

# Scan the directory 
opendir(DIR, $files_dir) || die "can't open directory"; 
# Get "file.aa" or "{char}aa" ? 
my @files = grep($file_ext, readdir(DIR)); 
closedir(DIR); 

$index_string = ''; 
foreach $file (@files) { 
    $index_string .= $file . ' '; 
} 
chomp($index_string); 

# If needed prepend previous index 
# .... 

$index_string = 'information=' . $index_string; 
open(FILE, '>', $index_file) || die "cant open file \n"; 
    print FILE, $index_string; 
close(FILE); 

てみてください存在しないインデックスファイルに必要かどうか.aa 2)との拡張子を持つAAか何かに続く任意の文字を名前のファイルを探しているかどうか)1を検討する

物事それはアウト。がんばろう。

+0

ありがとう!出来た。これにかなりの間今こだわっていた。 – shubster

1

あなたのやろうとしていることはまったくわかりませんが、同じファイルを読み書きしたり、いくつかの概略的な構文を書いていても、これはほとんどあなたのやっているようです。 SEARCHとREPLACEがどこから来るのかは不明ですが。それがファイル名とともに制御ファイルの中にあれば、それはかなり簡単に集めることができます。

for FILE in `cat controlfile` 
do 
    perl -i -e 's/SEARCH/REPLACE/' ${FILE} 
done 
関連する問題