2009-06-02 12 views
-1

J'essaie de lire un répertoire qui se compose de centaines de fichiers. Pour chaque fichier dans le répertoire, je suis supposé accéder (éditer) un autre fichier et remplacer une chaîne particulière 'information = nom de fichier' dans ce fichier par le nom des fichiers 'information =' présent dans '/ home/test/test_these_files'. Ceci est suivi par l'exécution du fichier '/home/test/controlfile.txt'. J'ai écrit le script suivant et j'ai essayé de passer les noms de fichiers en tant que tableau à remplacer (noms de fichiers dans la chaîne). Je sais que cela ne marchera pas, mais je ne suis pas sûr de ce qui va fonctionner. Aucune suggestion? FYI: le programme ne montre aucune erreur de compilation.Comment entrer différents noms de fichiers dans une chaîne qui doit être remplacée?

#!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

L'indentation est votre ami. Qu'est-ce que '' perl /home/test/controlfile.txt ';' supposé faire? Et $ replace est mal réglé. – Schwern

Répondre

0

Votre erreur principale est probablement dans votre tralala:

#!/usr/bin/perl 

au lieu de

#!use/bin/perl 

pourriez-vous reformuler votre question aussi. Il est vraiment difficile de comprendre ce que vous essayez de dire.

--edit

Je pense que je comprends votre question, vous devez créer un fichier qui indexe tous les fichiers existants dans un répertoire particulier.

choses à considérer 1) si vous êtes à la recherche de fichiers nommés un caractère suivi d'aa ou quoi que ce soit avec une extension avec 2 .aa) si vous devez les fichiers d'index qui n'existent pas

#!/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); 

Essayez ça dehors. Bonne chance.

+0

Merci beaucoup! Ça a marché. Était coincé sur cela pendant un certain temps maintenant. – shubster

1

ce n'est pas du tout évident ce que vous essayez de faire, mais en lisant et en écrivant dans le même fichier et une certaine syntaxe sommaire, il semble presque que ce soit ce que vous voulez faire. Bien que l'endroit où la RECHERCHE et le REMPLACEMENT doivent provenir n'est pas clair. Si c'est dans le controlfile avec un nom de fichier, c'est assez simple à rassembler.

for FILE in `cat controlfile` 
do 
    perl -i -e 's/SEARCH/REPLACE/' ${FILE} 
done