Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12569[/thread]

Dateien aus Verzeichnissen und Unterverzeichnissen kopieren

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
Max86
 2008-10-01 12:26
#115055 #115055
User since
2008-10-01
7 Artikel
BenutzerIn
[default_avatar]
Guten Morgen Perl-Gemeinde.

Ich habe folgendes Problem und hoffe das ihr mir helfen könnt.
Ich habe ein Skript geschrieben mit welchem man in einen beliebigen Verzeichnissen nach beliebigen Dateien oder Dateitypen suchen kann. Es werden auch alle Unterverzeichnisse durchsucht.

Soweit funktioniert das Skript auch, die entsprechenden Dateien werden gefunden und ich kann mir diese Anzeigen lassen.

Weiterhin sollen dann die gefundenen Dateien in einen neuen Ordner kopiert werden. Hier liegt das Problem. Die Dateien die sich im obersten angegeben Verzeichnis befinden werden auch kopiert aber die aus den Unterverzeichnissen nicht. Das Problem liegt meiner Meinung nach bei den Pfad angaben aber ich komm irgendwie auf keine Lösung.

Für die Suche verwende ich File::Find und fürs kopieren File::Copy

Code: (dl )
1
2
3
4
5
6
7
8
9
foreach my $files(@files)
{
print "$files\n";
my $quelle = "./$verzeichnis";
my $ziel = "./$folder";

copy("$quelle/$files","$ziel/$files");

}


$verzeichnis ist das Verzeichnis welches man zu beginn des Skriptes Angibt
$folder ist ein Ordner welcher bereits erstellt worden ist.

Die Frage ist also. Wie kann ich auch die Dateien die in den Unterverzeichnissen gefunden wurden kopieren.

Grüße Max
GwenDragon
 2008-10-01 12:44
#115056 #115056
User since
2005-01-17
14544 Artikel
Admin1
[Homepage]
user image
Werden denn Dateien auch in den Unterverzeichnissen mit File::Find gefunden?

Zeig doch bitte mal den Code für das Finden der Dateien.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

renee
 2008-10-01 12:55
#115057 #115057
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Willst Du die Dateien in den Unterverzeichnissen auch in ein Unterverzeichnis des Zielordners kopieren? Also

./quelle/test.txt nach ./ziel/test.txt
./quelle/test/test.txt nach ./ziel/test/test.txt

Oder willst Du alles nur ins Zielverzeichnis kopieren? Also

./quelle/test.txt nach ./ziel/test.txt
./quelle/test/test2.txt nach ./ziel/test2.txt


Wenn ersteres, existieren die Unterverzeichnisse im Zielverzeichnis schon? Wenn nein, müssen die erst erstellt werden.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Max86
 2008-10-01 12:57
#115058 #115058
User since
2008-10-01
7 Artikel
BenutzerIn
[default_avatar]
Ja gefunden werden die Dateien.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
find(\&bedingung, $verzeichniss);


sub bedingung {
if ( $File::Find::name =~ /^$datei$/ )
{
push(@files, $_);
}
return;
}


$datei wird vorher abgefragt.


Es soll alles nur in Zielverzeichnis kopiert werden.
Linuxer
 2008-10-01 13:04
#115059 #115059
User since
2006-01-27
3872 Artikel
HausmeisterIn

user image
Mit dem Code merkst Du Dir aber nur die reinen Dateinamen. Die Pfade zu den Dateien bleiben aussen vor!

Auszug aus 'perldoc File::Find':
Quote
$File::Find::dir is the current directory name,
$_ is the current filename within that directory
$File::Find::name is the complete pathname to the file.


Wenn ich Deine Logik richtig sehe und mich nun nicht vertue, würde ich die beiden verwendeten Variablen austauschen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
my $pattern = '.+\.xls';
my @files;

find( \&wanted, @dirs ),

sub wanted {
  # nur den Dateinamen überprüfen
  if ( $_ =~ m/^$pattern$/ ) {
    # kompletten Pfad zur Datei merken
    push @files, $File::Find::name;
  }
  return;
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Max86
 2008-10-01 13:22
#115060 #115060
User since
2008-10-01
7 Artikel
BenutzerIn
[default_avatar]
Das funktioniert schon ganz gut. Jetzt bekomme ich den komplette Pfad.
Jedoch funktioniert jetzt das copy nicht mehr, da jetzt die Pfadangaben falsch sind.
Aber ich denke das müsste sich relativ einfach ändern lassen

Ich muss jetzt erstmal los.

Schon mal vielen dank für die schnell Hilfe.

Grüße Max
Max86
 2008-10-01 16:29
#115070 #115070
User since
2008-10-01
7 Artikel
BenutzerIn
[default_avatar]
Also ich bekomme das mit dem Kopieren irgendwie nicht auf die Reihe.

Da ich ja bei vielen Unterordnern ständig andere Pfade habe und von diesen aus die gefundenen Dateien ins Zielverzeichnis kopieren will.

Wie müsste ich da mit File::Copy herangehen?
renee
 2008-10-01 17:25
#115077 #115077
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast meine Fragen noch nicht beantwortet...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Max86
 2008-10-01 17:41
#115079 #115079
User since
2008-10-01
7 Artikel
BenutzerIn
[default_avatar]
Sorry renee ich war nur kurz in meinem zweiten Post drauf eingegangen.

Alle gefundenen Dateien sollen im Zielverzeichnis landen ohne Unterordner.
nepos
 2008-10-01 17:47
#115080 #115080
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja und wo hakts denn nun?
Wie wärs z.B. mal mit sowas:
Code (perl): (dl )
1
2
copy("$quelle/$files","$ziel/$files")
    or die "Fehler beim Kopieren von $files: $!";

Lass dir auch mal ausgeben, was du als Ziel und was du als Quelle übergibst.
Dein Fehler dürfte ziemlich sicher an $ziel/$files liegen ;)
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2008-10-01 12:26.