2016-05-18 21 views
0

Ich versuche, Dateien von DIR1 zu DIR2 mit Perl-Skript zu verschieben. Mein Code kompiliert, funktioniert aber leider nicht richtig. Vielen Dank im Voraus für AnregungenPerl - Verschieben von Dateien von DIR1 nach DIR2

#!/usr/bin/perl -w 
use File::Copy; 
use Cwd 'abs_path'; 

if (@ARGV != 2) { 
    die "Script takes two parameters: dir1 dir2"; 
} 

if (-d $ARGV[0] && -d $ARGV[1] ) 
{ 
    opendir my $DIR, $ARGV[0] or die "Read error: $!"; 

    while(my $file = readdir $DIR) 
    { 
     next if ($file eq "." or $file eq ".."); 

      my $filepath = abs_path($file); 
      print "$filepath\n"; 

      move $filepath, $ARGV[1]; 
    } 
    closedir $DIR; 
} 
else 
{ 
    print "Both arguments must be directories!\n"; 
} 

Script druckt alle Dateien in DIR1 aber verschieben schlägt fehl.

+0

Diese Frage ist sowohl zu spezifisch (d. H. Wird wahrscheinlich niemandem helfen) als auch nicht gut erforscht (einige einfache Debug-Debugging- oder Debugger-Sitzungen hätten den Fehler aufgedeckt). Bitte lassen Sie sich etwas mehr Zeit, um zu recherchieren und Ihre Frage zu formulieren, bevor Sie sie in Zukunft veröffentlichen. Vielen Dank! – patszim

+1

'abs_path' macht nicht, was Sie denken, dass es tut. Es schaut nur auf das Argument, das Sie ihm gegeben haben, und gibt zurück, was ein absoluter Pfad wäre, wenn dieses Argument einen relativen Pfad darstellt. Es sucht ** nicht ** nach Ihrem Dateisystem, um herauszufinden, wo sich diese Datei befindet, und gibt den absoluten Pfad zu dieser Datei zurück. Sie müssen das Verzeichnis selbst angeben, das in '$ ARGV [0]' enthalten ist. –

Antwort

2

readdir gibt nur die Dateinamen im angegebenen Verzeichnis zurück. Um einen absoluten Dateipfad zu erhalten, muss $ ARGV [0] vorangestellt werden. Weitere Informationen finden Sie unter perldoc for readdir.

+0

Oder nicht, und verwenden Sie stattdessen "glob". – Sobrique